f=File.open('a.c','w') f<<'#include #include #include #include #define mem_size 20000000 /*20M (80 megs of ram)*/ int geti() { int i; scanf("%d", &i); return i; } int main() { srandom(time(0)); int *mem=calloc(mem_size, sizeof(int)); int *basememp, *memp = mem + mem_size / 2; basememp = memp; int from; int '+[*'a'..'z']*','+'; '+[*'a'..'z']*'='+'=0; top: switch (c) { ' line=-1 gets(p).scan(/(\w)(\d+|\w)/){ from = case $2[0] when ?i : 'getchar()' when ?j : 'geti()' when ?r : '(random()%r)' when ?0..?9 : $2 when ?A..?Z : "memp[#{$2[0]-?A}]" when ?a..?z : $2 end f<<"case #{line+=1}: #{case $1[0] when ?o : "putchar(-#{from})" when ?q : "printf(\"%d\",-#{from})" when ?p : "from = #{from}; p -= from; memp -= from" when ?c : "c -= #{from} - 1; goto top" when ?A..?Z : "memp[#{$1[0]-?A}] -= #{from}" when ?a..?z : "#$1 -= #{from}" end }; c+=1; " } f<<'} free(mem); return 0; } ' f.close