whitespace のコードはちょっと書きにくいので、brainfuck のソースコードを whitespace に翻訳するプログラムを作った。brainfuck は書けるけど、whitespace はちょっと……という人向け。
http://dame.dyndns.org/misc/brainspace/
brainfuck のコードに whitespace で注釈をつけるプログラム、とも言える。whitespace は読めるけど brainfuck はちょっと……という人にも。
出力が莫大なので、サンプルは続きに。
>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]>++++++++[<++++>-]< .#>+++++++++++[<+++++>-]<.>++++++++[<+++>-]<.+++.------.--------.[-]>++++++++[<+ +++>-]<+.[-]++++++++++.
を、
ここから > +++++++++ [ < ++++++++ > - ] < . > +++++++ [ < ++++ > - ] < + . +++++++ . . +++ . [ - ] > ++++++++ [ < ++++ > - ] < . #> +++++++++++ [ < +++++ > - ] < . > ++++++++ [ < +++ > - ] < . +++ . ------ . -------- . [ - ] > ++++++++ [ < ++++ > - ] < + . [ - ] ++++++++++ . ここまで
にしてくれる。
今朝できたてのほやほや。使用言語は bf2c と同じく Haskell と Ruby。一発ネタなので特に凝ったことはせず、brainfuck の各命令を whitespace のコード断片に置き換えるだけ (一応、連続する '+' '-' '>' '<' をまとめるだけはやった) 。beef (brainfuck インタプリタ) と wspace (whitespace インタプリタ) で動作確認。
$ beef hello.bf Hello World! $ ./Brainspace < hello.bf > hello.ws $ wspace hello.ws Hello World!
ちなみに、brainfuck で意味のある文字と whitespace で意味のある文字は当然 disjoint なので、
$ beef hello.ws Hello World!
も動く。発展させて、「普通の C 言語のソースに見えるけど、実は whitespace で実行すると秘密のメッセージが表示される」みたいな透かしを入れると面白いかもね。