Crazy J/QUINE

From Esolang
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 of DATA section.
  • Decoded DATA in reverse order. "Decoded" means:
    • ij becomes `
    • ji becomes i
    • jj becomes j
   ```````` `ij jj ji ij ii
            ^^^ ~~ ~~ ~~ ~~
            |||_/  /  /  |
            ||____/  /   |
            |_______/   STOP
  • Copy of DATA section.

What DATA should we pass to the ENGINE to make QUINE? It must be encoded ENGINE reversed!