Crazy J/QUINE
Jump to navigation
Jump to search
Crazy J examples
QUINE
`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````j``j`j`j```j``j`jiii``jiii``jiiji`````j`j`j`j``jiii``jiji``j`jii````j`j``jii````j`j``jii`ji``ji``ji``j``jii````j`j``jiii``jij``jii`j``jii```j``jii`ji``ji`j`j``jii````j`j``jii```j``jii`j`j``jii````j`j``jii````j`j``jii``ji```ji```ji```ji``ji``ji```ji```ji``j`j``jii``ji``jij``ji```ji``jii``ji`ji``ji```jij``ji```ji``j``jii````j`j``jii``jii````j`j``jii`j```jii````j`j``jii``ji`ji`j`j``jii``ji`ji``ji``ji```ji`j`j``jii```j`j`j``jii```jiii`j`ji``jii``ji``ji``````j``j`j`j```j``j`jiii``jiii``jiiji`````j`j`j`j``jiii``jiji``j`jii````j`j``jii``ji``ji```ji`ji`j`j``jii``ji```ji```ji```ji``j`j``jii``ji```ji```ji``j``jii``ji```ji`ji``ji`ji`ji`j``jii``jii``jij```j`j``jii``ji```ji``jii``ji```ji```ji`ji``ji````j`j``jii``ji`ji`j`j``jii`j`j``jii``ji`j``jii``ji``ji```ji``j`j``jiii``ji```ji``j``jii``ji`ji``ji```ji`ji```j`j``jii``ji`ji``ji``ji`ji``ji`j`j``jii`j``jii```ji``jii`ji``jij``ji`j`j``jii````j`j``jii```j``jii`ji``ji```ji`j`j``jii``ji``jii``ji```jij``ji`ji``ji```ji``jii`ji``ji```ji```ji```ji`j`j``jii``ji```ji`ji`````j`j``jii``ji`ji`j`j``jii``ji`ji```j``jii`ji`j``jii``ji``ji`ji```ji``ji`j``jii``ji``jii``ji```ji```ji```ji`j`j``jii``ji```ji``ji```j``jii````j`j``jii``ji`j``jii``ji```ji`j`j``jii```ji```ji```ji```ji`j``jii```ji```ji``ji``ji`ji`````j`j``jii``ji`ji`j`j``jii``ji`ji`ji```jii`ji`ji````j`j``jii`j``jii``ji``ji`ji```ji```ji`ji`````j`j``jii``ji`ji`j`j``jii``ji`ji``ji``jii```jii``ji``jii``jii``ji`ji```j``jii``ji```ji`j`j``jii``ji`j`j``jii``ji```ji```ji```ji`j``jii``ji```ji```ji`ji```ji```ji``jiiii``ji```ji`j`j``jii``ji``jii``ji```ji``j`j``jii`ji``ji```ji`ji``ji`ji``ji```ji```ji```ji```j`j``jii``jij``ji```ji`j`j``jii``ji`ji``ji`ji``ji```ji``ji```ji`j``jii``jii```ji```ji`jiii`j`j``jii```ji``ji`ji`ji```ji``jii``ji``ji``ji`ji``ji```ji`ji```j``jii``ji``````j``j`j`j```j``j`jiii``jiii``jiiji`````j`j`j`j``jiii``jiji``j`jii````j`j``jii`j`j``jii`j`j``jii``ji```ji```j`j``jii````j``j```jii`j`j``jii``jiiij```j``jii````j`j``jiii``jij``jii``ji``j``jii````j```jii```j``ji```ji``j``jiiii```jjii``j`jijii``jii``ji``j`j``jiii````j`j``jii``ji``ji`ji````j`j``jii``ji``j``jii`j`j``jii``ji``ji`j`j``jii`j`j``jii``ji```ji``ji``jii```j`j``jii`j`j``jii``ji``ji```ji```ji``ji```ji`ji````j`j``jii````j``j```jii`j`j``jii``jiiij```j``jii````j`j``jiii``jij``jii``ji``j``jii```j``jii````j`j``jiii``jij``jii``ji``j``jii````j``ji``j``jiii``jii``jij```j```j`j``ji``j``jiiiiii``j`jj``jij```jii````j``j```jii`j`j``jii``jiiij```j``jii````j`j``jiii``jij``jii``ji``j``jii````j``ji``j``jiii``jii``jij```j```j`j``ji``j``jiiiiii``j`jj``jij````j``j```jii`j`j``jii``jiiiji`ji````j`j``jii``ji``ji`j``jii``ji```ji`j`j``jii````j`j``jii``ji`j``jii``ji```ji`j`j``jii``ji```j``j```jii`j`j``jii``jiiij``ji```ji`ji``````j`j`j``jii```jiii`j`ji`````j`j`j``jii```jiii`j`ji```j``ji``j``jiii``jii``jij```j```j`j``ji``j``jiiiiii``j`jj``jij``````j`j```j```jj`j``jiiii`jiiiji```j``ji``j``jiii``jii``jij````j`j``jii`ji``ji``ji``j``jii````j`j``jiii``jij``jii`j``jii`j`j``jii```ji`j``jii````j``ji``j``jiii``jii``jij`````j`j``jii``ji`ji`j`j``jii``ji`ji```j``jii`ji`j``jii``ji``ji`j`j``jii``jij``jiii```j`j`j``jii```jiii`j`jiijijijjijjjijjijijijjijijijjijijjijijjjijjjijjjijijijjijijijjijijjjjijjijijjijijjijijjjijjjijjijjijijjijjijijjijijjijijjjijjijjijjijijjijijjjijijijjijjijjijjijijjijijjijijjjijjjijjijjijjijjijijjijijjijijjjijjjijijijijijjjjijjijijjijijjijijjijijijjijijjjijijjijjijijjjijijijijjijijjijijjjijjijjijijijjijijjijijjjijjjijjijijjijijjjijjijijjijijjjjijjijijjijijijjijijjjijjjijijijijjijijjijijjjijijjijjijijjijjijijjijjijjijijjijijjjijjjijijijijjjjijjijijjijijjijijjijijijjijijjjijijjijjijijjjijijijjijjjijijijjijjijijijijjijijjjijjjjjijijijjjijijijjjijjjijijijijijijjjjijjijijjjjjijjjijijjijijijijijijjijijjjijijjijjijijjjijjjijijijjjijijijjjjijjijijjijijjijijjijijijjijijjjijijjijjijijjjijijijjijjijjjijjijijijjijijijjijijjijijjjijjjijjjijijijijijjijjijjjijjijijijjijijijjijijjijijjjijjjijjjijijijijijijjijjijjijjijijijjijjijijjjjijijijjijijjijijjijijjjijjjijjijijjijijijjjijijjjijijijjijjijijjijijjijijjjijjjijjijjijijijjijjijijjijijjijijjjijjijjijijjijijjijijjjijjjijijijijjijijjijijjjijjjijjijjijijijjijjijijjijijjijijjjijjijjijijjijjijijjijijjijijjjijjjijijijijjijjijjijjjijijijjijijjijijjijijjjijjjijjijijjijijijjjijijjjijijijijjjjijjijijjjjjijjjijijjijijijijijijjijijjjijijjijjijijjjijjjijijijjjijijijjjjijjijijjijijjijijjijijijjijijjjijijjijjijijjjijijijijjijijjijijjjijijjijjijijjijijjijijjjjijjijijjijijijjijijjjijjjijijijijjijijjijijjjijijijjjjijijijjijijjijijjijijjjijjjijjijijjijijijjjijijjjijijijijjijijjijijijjjjijjijijjjjjijjjijijjijijijijijijjijijjjijijjijjijijjjijjjijijijjjijijijjjjijjijijjijijjijijjijijijjijijjjijijjijjijijjjijijijijjijijjijijjjijijjijjijijjijijjijijjjjijjijijjijijijjijijjjijjjijijijijjijijjijijjjijijijjijijjijijjjijijjijjijijjijijjijijjjjijjijijjijijijjijijjjijjjijijijijjijijjijijjjijijijjjjijijijjijijjijijjijijjjijjjijjijijjijijijjjijijjjijijijijjijijjijijjjijjjijijijijjijjijjijjijijijjijjijijjijjijijijjijjijijijjijjijijjijjijijjijijjijijjjijjjijjijijjijijjjijjjijijijjijijjijijjijjijijjijjijijijjijjijijjijijjijijjjijjjijjijijjijijjjijjjijjijjijijjijjijijjijijjijijjjijjjijjijijjijijjjijijjijjijijjijijjijijjjijjjijijijijjijjijjijjijijjijjijijjijijjijijjjijjjijijijijjijijijjijijjjijjjijijjijjijijjijijjijijjijijjjijjijjjijijjijijjjjijijijjijijijijjijijjjijijjijjijijijjijjijijjjijijijjijijjijijijjjijijijijjijijjijijjjijijjijjijijjijijjijijjjjijjijijjijijijjijijjjijjjijijijijjijijjijijjjijijijjjjijijijjijijjijijjijijjjijjjijjijijjijijijjjijijjjijijijijjijijjijijjjijjjijijijjijjijijijjijjijijjijijjijijjjijjjijjijijjijijjjijjjijjijijjijijjjijjjijijijijjijijjijjjijijjijjjijjijijjijijijjijijjjijjjijjjijjjijijijijijjijjjijijjijijjijijijjijijjijijijjijjjijijjjijijijjjijjjijjjijijjjijijijijijijjijjijijjijijjijijjjijijijjijjijjijjijijijjijjijijjijjijjijjijijjijjijijjijjijijjijijjijijjijjijijijjijjijjijjijjijjijijjijjijijijjijijjijijjjijjjijjijijijjijjijjijijijjijjijijijjijijjijijjijijjijijjjijjijjijijijjijjijijjijjijijijjijjijijjijjijjijjijijjijjijjijjijijjijijjijijjjijjjijjijjijijijjijjijijjjjijjijijjijijjijijjjijjjijijijjijjijijijjijjijijijjijjijijijjijjijijjijjijjijjijijjijjijjijjijijijjijjijijjijjijjijijjijijjjijjjijijjijjijijijjijjijijjijijjijijjijjijijjijijjijijjjijjjijjijjijijijjijjijijjijijijijjijijjijjijijijjijjijijijjijjijjijjijijijjijjijijijjijjijijjijijjijijjjijjijjijijijjijjijijijjijjijijijjijjijijjijijjijijjjijjjijjijjijijjijijjijijjjijjjijjijjijijijjijjijijjijijjijijjjijijijjijjijjijjijijjijijjijijjijijjijijjijjijijjijijjijijijjijijjijijjijjijijjijjijjijjijijjijijjijijjjijjjijjijjijjijjijijjijijjijijjjijjjijijijijijjijjijjijjijijijjijjijijijjijjijjijjijijjijjijijjijijjijijjjijjijijjijijjjijjjijijijijjijjijjijjijjijijjijijijjijjijjijjijjijjijijjijijjijijjjijjjijjijjijjijjijijjijijjijijjjijjjijijijijijjijjijjijjijijjijjijijjijjijijijjijjijijijjijijjijijjjijjijjijijijjijjijijijjijjijijijjijjijijijjijijjijijjjijjjijjijjijijijjijjijijjijijjijijjjijjijjijijjijijjijijjjijjjijijijijjijijjijijjjijijijjijjijijjijjijijijjijjijijjijijjijijjjijjjijjijjijijijjijjijijijjijjijijijjijjijijjijijjijijjijjijijjijijjijijjjijjijjijijjijjijijijjijjijjijjijijjijjijijjijijjijijjjijjijjijjijijjijijjjijijijjijjijjijjijijjijijjijijjjijjjijjijjijjijjijijjijijjijijjjijjjijijijijijjijjijjijjijijijjijjijijjijijjijijjjijjjijjijjijijijjijjijijijjijjijijijjijjijijjijjijjijijjijijjijjijijijjijjijijjijjijjijjijijjjjijjijijijjijjijijjijijjijijjijjijijjijijjijijjjijjjijjijjijijijjijjijijjijjijjijijjijijjjijijijjijijjijijjjijjjijijijijjijijjijijjjijjjijjijjijijjjjijjijijjijjijjijijjijijjijjijijijjijijjijijjjijjijijjijijjjijjjijjijjijijjijjijjijjijijjijjijijjijjijjijjijijjijijjijijjjijjjijijijjijjijjijjijijijjijjijijjijjijjijjijijjijijjijijjjijijjijjijijijjijjijijjijijijjijijjjijjjijijjijjijijijjijjijijjijjijijjijijjijijjjijjijjijijjijijjijijjjijjjijjijijjijijjjijjjijjijjijjijjijijjijijjijijjjijjjijijijijjijjijijjijjijjijjijijijjijjijijijjijjijijjijijjijijjijjijijijjijjijijjijijjijijjjijjjijijijjjjijjijijjijijjijijjijijjijijjjijjijjijjijjijjijjijijjijjijjijjijijijjijjijijjijijjijijjjijijjijjijijijjijjijijijjijjijijjijijjijijjjijjjijijjijjijijijjijjijijijjijjijijijjijjijijjijijjijijjjijjjijjijjijjijjijijijjijjijijjijjijijjijijjijijjjijjjijijijijjijijjijjjijijjijjjijjijijjijijijjijijjjijjjijjjijjjijijijijijjijjjijijjijijjijijijjijijjijijijjijjjijijjjijijijjjijjjijjjijijjjijijijijijijjijjijijjijjijijjijijjijijjijjijjjijjijijijjijijijjijijjijijjjijjjijjjijijijjijijjijijjjijjjijjijjijijijjijjijijjijjijijjijjijjijjijijjijijjijijjjijjjijjijjijjijjijijjijijjijijjjijjjijijijijjijijjijijijjjijjijijjijijjjijjjijijijijjijijjijijjijijjijijjjijjjijijijijjijijjijijjjijijjijjijijijjijjijijjjjijjijijijjijjijijjijjijjijjijijjijijjijijjijjijijijjijjijijjjjijjijijjijjijijjijijjijijjjijjjijijjijjijijijjijjijijijjijjijijjijjijijjijjijijijjijjijijijjijjijijijjijjijijjijijjijijjjijjjijijijijjijijjijijjjijjjijijijijjijijjijijjjijjjijjijijjijijjjijijijjijijjijijjjijjjijijijijjijijjijijjjijjjijjijjijijjijjijjijijjijijjjijijijjijijjijijjjijjijijjijijjjjijjijijjijijijjijijjjijjjijijijijjijijjijijjjijijjijjijijjijjijijjijjijjijijjijijjjijjjijijijijjijijjijijjjijjjijijijijjijijjijjjijijjijjjijjijijjijijijjijijjjijjjijjjijjjijijijijijjijjjijijjijijjijijijjijijjijijijjijjjijijjjijijijjjijjjijjjijijjjijijijijijijijijijii
Quite obvious if you look at it closely, but some explanation should be given anyway.
The program consists of 3 parts:
| | | | | `````````````` | ENGINE | DATA | | | | | | 2N+2 | N | 2N+2 |
ENGINE is a function of length N that accepts pairs of boolean arguments:
- It accumulates the list of {饾煓,饾煔,饾煕} codes and counts number of pairs given.
- If {FALSE, FALSE} is given, it adds 饾煕 to the front of the list and two 饾煕's to the end, then it calls itself recursively to accept next pair of boolens.
- If {FALSE, TRUE} is given, it adds 饾煓 to the front of the list and (饾煕,饾煓) to the end, then it calls itself recursively.
- If {TRUE, FALSE} is given, it adds 饾煔 to the front of the list and (饾煓,饾煕) to the end, then it calls itself recursively.
- If (TRUE, TRUE} is given, it adds (2N+2) 饾煔's to the front of the list and two 饾煓's to the end, then the list is printed.
We use alternative boolean implementation (with the shortest possible representation of boolean constants but with longer "if" operator):
true = I false = J COND I I (位 garbage . THEN-BRANCH) (位 garbage . ELSE-BRANCH)
What are 饾煓, 饾煔 and 饾煕? They are Q1, Q2 and Q4 combinators:
Q1 = 位 x y z . x (z y) Q2 = 位 x y z . y (z x) Q4 = 位 x y z . z (y x)
Such a choice allows to do this:
value (位 garbage . <print 'i'>)
(位 garbage . <print '`'>)
(位 garbage . <print 'j'>)
Okay, that's what ENGINE does. Where's the QUINE?
Let's look at the outputs of this program:
PROG: ```````` <ENGINE> jjjiijii OUTPUT: `````````ijjjjiijii
PROG's output consists of 3 parts:
- Sequence of
`characters. The length of the sequence is the same as the length ofDATAsection. - Decoded
DATAin reverse order. "Decoded" means:ijbecomes`jibecomesijjbecomesj
```````` `ij jj ji ij ii
^^^ ~~ ~~ ~~ ~~
|||_/ / / |
||____/ / |
|_______/ STOP
- Copy of
DATAsection.
What DATA should we pass to the ENGINE to make QUINE? It must be encoded ENGINE reversed!