BrainFuckソース生成プログラム

http://members.jcom.home.ne.jp/j-klein/src-box/2brainfuck.c

標準入力から文字列を読み込んでBrainFuckソースコードに変換します。当然、馬鹿みたいに++++++...とASCIIコードの数だけ繰り返すのではなく、出来る限り短くなるように最適化します(しようとします)。

例えば次のCによるHello, WorldをBrainFuckに変換してみます。

int
main(int argc, char *argv[])
{
    printf("Hello, World\n");
    return 1;
}

BrainFuckにすると……

 >>+++[<+++++[<+++++++>-]>-]<<.+++++.++++++.-------.>++++[<--->-]<.>++++[<++>-]
 <.+++++.>>++[<+++++[<------->-]>-]<<.>>++++[<++++[<++++>-]>-]<<+.+++++.++++++.
 >>++++[<+++[<------->-]>-]<<.>>++++[<++++[<++++>-]>-]<<+.>++++[<++++>-]<+.----
 -------.----.>+++++[<----------->-]<.>++++[<--->-]<.>++++++[<+++++++++++>-]<+.
 +++++.-------.>++++[<++++>-]<+.>>>+++[<+++[<+++[<--->-]>-]>-]<<<-.>++[<+++++>-
 ]<.>+++++[<+++++++++++>-]<.>++++[<++++>-]<+.-----------.>+++[<+++++>-]<.>>+++[
 <+++[<--->-]>-]<<.++.>>++[<+++++[<----->-]>-]<<--.>>>+++[<+++[<+++[<+++>-]>-]>
 -]<<<+.-----------.++.>+++[<--->-]<.+++++.++++++.>++[<------->-]<.>>++++[<+++[
 <----->-]>-]<<--.------.>>++++[<+++[<+++>-]>-]<<++.>++++[<+++++++>-]<+.+++++++
 ..+++.>++++++[<----------->-]<-.>++++[<--->-]<.>+++++[<+++++++++++>-]<.>++++[<
 ++++++>-]<.+++.------.>++++[<-->-]<.>++++[<-->-]<.>++++++[<+++>-]<.>>+++[<++++
 +[<----->-]>-]<<-.+++++++.>++++++[<+++>-]<.>+++++[<+++++++++++>-]<.>++++[<--->
 -]<-.>+++[<+++++>-]<.+.---.----.>+++++++[<----------->-]<-.>++++[<++++>-]<+.>+
 +[<+++++>-]<.>++++++[<+++++++++++>-]<.

となるわけです。これで、CとBrainFuckで同時にHelloWorldを実現できました(笑)。もちろん、これを実行して、コンパイルできます。

適当に作ったので、ソース汚いのは勘弁してくださいな。


【追記】

関連してhttp://members.jcom.home.ne.jp/j-klein/software/bfm/もアップデートしました。これを利用すると上記のBrainFuckのソースを実行して、CのHello, Worldにもどすことが出来ます。

# 古いバージョンのBFMは改行処理がダメだったので、うまくCのソースに戻りません。現在のバージョン(version 1.0.0)ならばバッチリ戻ります。