If(j)invert()if(l)change()if(q)input()if(t)output(x);
If(j)invert()if(l)change()if(q)input()if(t)output(x); is a joke language.
Specifications
If(j)invert()if(l)change()if(q)input()if(t)output(x); has 2 cells of memory and an instruction pointer. Both cells can store integers.
Instruction | Action |
---|---|
j |
If the cell is 0, set it to 1. Else, set it to 0. |
l |
Shift the pointer to the other cell. |
q |
Accept input and overwrite it at the selected cell. Integers other than 0 and 1 are accepted. |
t |
Output the selected cell's value. |
All other characters output themselves.
Interpreters
Java
This may not be accurate to the (likely) official C interpreter.
import java.util.Scanner; public class jlfq{ public static String interpreter(String code){ Scanner input=new Scanner(System.in); int[] mem={0,0}; int pointer=0; String o=""; for(int i=0;i<code.length();++i){ switch(code.charAt(i)){ case'j': mem[pointer]=(mem[pointer]==0)?1:0; break; case'l': pointer=(pointer==0)?1:0; break; case'q': mem[pointer]=input.nextInt(); break; case't': System.out.print((char)mem[pointer]); break; default: System.out.print(code.charAt(i)); } } return o; } }
C
int[] mem = [0, 0]; int pointer = 0; int ip = 0; for(;;){ char x = scanf('%s', x); switch(x){ case('j'){ if(mem[pointer] == 0){ mem[pointer] = 1;}else{ mem[pointer] = 0;}break;} case('l'){ if(pointer == 0){ pointer = 1; }else{ pointer = 0;}break;} case('q'){ mem[pointer] = scanf('%i', mem[pointer]);break;} case('t'){ printf('%c', mem[pointer]); break;} default{ printf('%c', x); break;} } }
(It uses scanf, and it needs to be better)
Examples
More examples can be added if needed.
Hello World
Due to the limited nature of the commands, either 1 or 0 can be outputted by the program, restricting potential attempts past
He11o Wor1d
Hell11ojl ljWorl1d
The alternative is to ask the user to input the character l
themselves, since it is the only way to have an integer in a cell other than 1 or 0.
Heqtto Wortd
Cat
Using the instructions alone, a cat is limited to finite sequence of commands. Unless a looping command is implemented, cats are impossible. Finite versions include this program,
qtqtqtqtqtqtqtqtqtqtqtqtqtqtqtqtqtqtqtqtqtqtqtqtqtqtqtqtqtqt . . .
and this program.
qlqltltlqlqltltlqlqltltlqlqltltlqlqltltlqlqltltlqlqltltlqlql . . .
The difference between both is that the latter program outputs 2 at a time while the former outputs 1 at a time.
FizzBuzz
See Quine for more details.
1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz Fizz 22 23 Fizz Buzz 26 Fizz 28 29 FizzBuzz 31 32 Fizz 34 Buzz Fizz 37 38 Fizz Buzz 41 Fizz 43 44 FizzBuzz 46 47 Fizz 49 Buzz Fizz 52 53 Fizz Buzz 56 Fizz 58 59 FizzBuzz 61 62 Fizz 64 Buzz Fizz 67 68 Fizz Buzz 71 Fizz 73 74 FizzBuzz 76 77 Fizz 79 Buzz Fizz 82 83 Fizz Buzz 86 Fizz 88 89 FizzBuzz 91 92 Fizz 94 Buzz Fizz 97 98 Fizz Buzz
Quine
Any message not using the commands j
, l
, q
, and t
is already a quine, since the default command for other characters is to output them. Examples include:
7his is a 9uine
7his is a1so a 9uine
As seen above, the latter 3 commands can be impersonated using 1
, 9
, and 7
, respectively, while j
can be replaced by ]
.
Code fragment where ll
can't be omitted without changing its behaviour
Amazing.
qllt