160バイトBrainfuckインタープリター

ツイートのサイズに収まり、pingに応答するtwIP IPスタックについて読んだ後、韓国のプログラマーであるKang Seonghoonは、ミニチュアでありながら実行可能なものを作成することにしました。 そして、彼はわずか160バイトのサイズで最小の Brainfuck C インタープリターを作成しまし



s[99],*r=s,*d,c;main(a,b){char*v=1[d=b];for(;c=*v++%93;)for(b=c&2,b=c%7?a&&(c&17?c&1?(*r+=b-1):(r+=b-1):syscall(4-!b,b,r,1),0):v;b&&c|a**r;v=d)main(!c,&a);d=v;}







インタープリターは、Brainfuckで任意のプログラムを実行できます。



$ cc bf.c -o bf

$ ./bf '++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.'

Hello World!








もちろん、160バイトに圧縮する必要があるため、多くのものを環境に転送する必要がありました。 移植性が高く、環境に依存しないインタープリターのバージョンは170バイトです。



s[999],*r=s,*d,c;main(a,b){char*v=1[d=b];for(;c=*v++%93;)for(b=c%7?a&&(c&17?c&1?(*r-=c-44):(r+=c-61):c&2?putchar(*r):(*r=getchar()),0):v;b&&c|a**r;v=d)main(!c,&b-1);d=v;}







通常のタブを追加すると、コードは次のようになります。



 //   s[999], *r=s, *d, c; main(a, b) { char *v=1[d=b]; for(;c = *v++ % 93;) for(b = c%7 ? a && (c & 17 ? c & 1 ? (*r -= c - 44) :(r += c - 61) :c & 2 ? putchar(*r) :(*r = getchar()) ,0) :v; b&&c | a * *r; v=d) main(!c,&b-1); d = v; }
      
      






All Articles