プログラムは ASCII で書くべきだよ

ふと、 main = 195; とかやって喜んでいた私はバカだったんじゃないかと思いました。 Binary 2.0 などとうかれてほとんどバイナリのコードをゴルフに submit してたのはどうなのか、と。プログラムは ASCII で書くべきだったんじゃないでしょうかと。それもメンテナンスしやすいように、 isprint が true を返すような文字で書くべきではないのか、と。

とりあえず Hello, world! 書きました。そのままコピペでたぶん最近の x86 & linux & glibc なら動きます。それ以外の環境では無理です。

char main[]="`j X$@P[PYPPPPX4.4 PZUX, P^XH,=)F(P_X3F()8)8@)8@@)8)8@PYX@@@@CQBaGHello, world!\n";

int 0x80 とか ret とか ASCII の範囲外だから苦労するね…これらの命令は自己書き換えで実行時に生成されています。気合いで。

バックスラッシュは \xc3 で ret とかされると興冷めなので、反則と考えているわけですが、最後の改行をめんどいので取っ払ってません。あとスタックの状態次第でたまに落ちるんで落ちたら何回か実行してみて下さい…

一応上のコードは適度にゴルフった結果です。その前に書いた、以下のコードは処理がそれなりにマジメなので落ちたりしないと思いますしバックスラッシュも入ってません。

char main[]=
    "QVWUZ%@@@@%    P^JJJJJJJJJJJJJJJJJJJJJJJJ3B PVXH, PTXHHHH!0Z_18R_)8)8)8)8"
    ")8)8)8)8WV_38WX_)8)8)8@)8@@@@)8)8)8T_VXOOOOOOOOOOOOOOOOOOOOOOOOWYVX!75Hel"
    "lVP^17^GGGGVX!75o, wVP^17^GGGGVX!75orldVP^17^GGGGVX!75aJ@@5@@@@VP^17^VXP["
    "PZBBBBBBBBBBBBBBC@@@@AHI@AHI@AHI@AHI@AHI@AHI@j__^Y`";

あ、アヒアヒとかは開いた空間を埋めるだけの命令なので、故意です。

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h