bf2piet: brainfuck から Piet への変換

esoteric language 好きなら一度は見たことのあるはずの画像プログラミング言語 Piet をまじめに勉強してみました。

どんな言語か簡単に説明すると、

  • 画像がプログラムになる
  • スタックを 1 個持つ (スタックマシン)
  • befunge みたいに左上から右方向に実行が進む
  • 色相と明度の差が命令を意味し、スタックに対する push/pop/加減乗除余や、進行方向の変更などを行う
  • 黒は進行方向を変える壁、白は nop

という感じで、サンプルコードを見てもなかなか意味不明でいい感じの言語です。


Piet の仕様についてはそのうち翻訳とかしたいけど、とりあえずは手始めに、Piet がチューリング完全であることを証明するべく、brainfuck から Piet への変換を作ってみました。
brainfuck の echo プログラム

,[.,]

を変換して出来た Piet のプログラムはこんな感じ。対応する命令のところに , とか . とか書いてあります。

これは Hello, world 。
http://github.com/mame/piet-misc/blob/master/hello.piet.png

動作は npiet で確認しています。npiet は画像でのトレース出力が出来て便利だけれど、白のあとで黒に当たったときの挙動にバグがある気がする。


ソースはこちら。変換方法は適当にコメントで書いてあります。
http://github.com/mame/piet-misc/blob/master/bf2piet.rb


こういうネタは日本語で書くだけじゃ還元されないからダメだよなー。英語のブログを作りたい。そのうち。