会社の主席エンジニアな人にランチの雑談で「Brainfuck」を教えてもらったので遊んでみた。
Brainfuck(ブレインファック)は難解プログラミング言語のひとつ。なお名称に卑語が含まれるため、Brainf*ckなどと表記されることがある。
Brainfuck - Wikipedia
開発者Urban Mullerがコンパイラがなるべく小さくなる言語として考案した。 実際、Mullerが開発したコンパイラのサイズはわずか123バイト(キロバイトではない!)、インタプリタは98バイトとなっている。
Brainfuck - Wikipedia
Brainfuck プログラムは非常に可読性・記述性が低いため実用性は期待できないが、それでもチューリング完全な(チューリングマシンで実行可能なあらゆるプログラムが記述できる)言語であり、理論上はC言語などの普通のプログラミング言語と同等の表現力を持つ。その簡潔から多くの派生言語を生み出すこととなった。
ほうほう!何やら面白そうではないですか。
最近、頭が固くなってきているので、頭の体操として、少しかじってみることにしました。
とりあえず環境を作る
$ sudo apt-get install bf
Ubuntuだったら、↑な感じでインストールするだけ。
Brainfuckの言語仕様
実行可能な命令は次の8つのみ!(C言語的には↓のような感じ。)
> becomes ++p; < becomes --p; + becomes ++*p; - becomes --*p; . becomes putchar(*p); , becomes *p = getchar(); [ becomes while (*p) { ] becomes }
文字列を出力してみる
とりあえず「Brainfuck」と出力させてみようかしら。
「Brainfuck」はASCIIコード的には、"42h 72h 61h 69h 6Eh 66h 75h 63h 6Bh"。
# 参考: Linux等でのログのモニタリングで簡単にアラートをキャッチするワンライナー (参考:US ASCII CODE LIST)
まずは書いてみようレベルで。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++. ++++++++++++++++++++++++++++++++++++++++++++++++.-----------------. ++++++++.+++++.--------.+++++++++++++++.------------------.++++++++.
あまりにもわかりにくいので、↓はわかりやすく改行を加えてみました。
++++++++++++++++ ++++++++++++++++ ++++++++++++++++ ++++++++++++++++ ++. ++++++++++++++++ ++++++++++++++++ ++++++++++++++++ . ---------------- -. ++++++++. +++++. --------. +++++++++++++++. ---------------- --. ++++++++.
「B」は"42h"なので、66回"+"して、文字出力"."して、次の文字「r」は"72h"なので、そこ(42h)からは48回"+"して、その次の文字は・・・の繰り返しですね。
$ bf test.bf Brainfuck
実行結果は↑のようになります。無事、文字列出力が出来ました。
繰り返し処理を活用して短くする
(ちょっと読みやすくするため、改行を加えています。)
++++++++[>++++++++<-]>++. <++++++[>++++++++<-]>. <----[>++++<-]>-. ++++++++. +++++. --------. +++++++++++++++. <----[>++++<-]>--. ++++++++.
こんな感じですかね。
先程は、最初に66回"+"しましたが、↑は"8 * 8"回をループで"+"して、その後2回"+"する感じ。こんな感じでループを活用することで、コードは短くなりましたが、頑張ればもうちょい短く出来そう...
$ bf test.bf Brainfuck
先程と同じ結果となりました。
echoプログラム
慣れない私は、↑のように文字列出力するだけで、ハァハァ言いながら頭を回転させて書いていたわけで、さすが難解プログラミング言語でシンプルなのはわかるけど、これは使えんわー、とか思っていたのですが、echoプログラムは驚異的な簡単さで記述できました。
,[.,]
うほっ。こりゃ短くてシンプルw
皆さんも、お暇なときにお試しください!
参考
- 作者: ブライアンカーニハン,ロブパイク,Brian Kernighan,Rob Pike,福崎俊博
- 出版社/メーカー: アスキー
- 発売日: 2000/11
- メディア: 単行本
- 購入: 58人 クリック: 1,152回
- この商品を含むブログ (209件) を見る
CODE COMPLETE 第2版 上 完全なプログラミングを目指して
- 作者: スティーブマコネル,Steve McConnell,クイープ
- 出版社/メーカー: 日経BP
- 発売日: 2005/03/26
- メディア: 単行本
- 購入: 44人 クリック: 1,166回
- この商品を含むブログ (288件) を見る