#include <stdio.h>
#include <stdlib.h>
#define K continue
#define t /*|+$-*/9
#define _l /*+$*/25
#define s/*&|+*/0xD
#define _/*&|+*/0xC
#define _o/*|+$-*/2
#define _1/*|+$-*/3
#define _0/*|+$*/16
#define J/*&|*/case
char typedef signed
B;typedef H;H main(
){B I['F'],V=0,E[]=
{s,0,s,31,t,1,s,111
,_,t,-3,_,s,50,_l,-
1,t,1,s,0x48>>2,_l,
-2,_,_1,5,_o,s,0,_1
,-8,s,0,s,-65,t,75,
s,100,_,t,8,_,_1,-5
,s,82,t,32,s,111,s,
20,_l,-2,t,7,_,_1,5
,_o,s,0,_1,-8,s,0,\
_0,};B*P=E;while(P)
{B L=*P,l=*(P+1),U=
I[V-1],A=(L>>2)&1,C
=(V-(1-A)),i;switch
(L)while(0){J _l:i=
l>0?U>>l:U<<-l;K;J\
t:i=U+l;K;J _:i=U;
K;J s:i=l;K;J _o:
putchar(U);K;J _1:
P+=U?0:l;K;J _0:e\
xit(0);}C[I]=(L&8)?
i:I[C];P+=(L&1)+1;V
+=A-((L&2)>>1);}re\
turn/*c.i.king*/0;}
You can download the source here.
Ha ha, very nice. No way I'm going to reverse engineer this to see how you did it, but it is beautiful!
ReplyDeleteTo get some better insight, do the following:
ReplyDeleteapt-get install astyle
gcc -E x.c > q.c
astyle q.c
... and look at q.c
You will see some interesting abuses of C, such as a breaking out of a switch statement using while(0) and continue as well as abuse of typedef. The code implements a small instruction machine.