NISHIO Hirokazu's website > NISHIO HIROKAZU # Archived COREBlog
これは2004年11月4日から2006年2月18日までZopeで運用していたCOREBlogの静的なアーカイブです。 新しい日記は「西尾泰和の日記」で運用しています。

PythonによるBrainf*ckインタプリタ

Brainf*ckの説明はこちら:http://ja.wikipedia.org/wiki/Brainfuck http://www.kmonos.net/alang/etc/brainfuck.php

コードに空白やコメントを入れられるようにしてみた。 compileメソッドを呼ぶと空白やコメントを取り除く。


 (このソースコードには最新版があります。PythonによるBrainf*ckインタプリタ 1.01を参照してください。)

bf = BFInterpreter()
bf.compile("""
>+++++++++[<++++++++>-]<.
>+++++++[<++++>-]<+.
+++++++.
.
+++.
[-]>++++++++[<++++>-]<.
>+++++++++++[<+++++>-]<.
>++++++++[<+++>-]<.
+++.
------.
--------.
[-]>++++++++[<++++>-]<+.
[-]++++++++++.
""")
bf.runCode()
これを実行すると「Hello, World!」と出る。


[Python]  @2005-09-12 11:00 | Comments (3)
<< 情報科学若手の会にて | Main | 若手の会へ[往路] >>

Comments
... by reli @2005-09-12 15:54

結構おもしろい言語ですね。使いものにはならないけど...

ところで、
>def stepCode(self):
> c = code[self.caret]
> self.command[c]()

は、c=self.code[self.caret]
じゃないですか?
code = bf.codeを求めているならいいんだけど。

... by nishio @2005-09-13 04:32

ああ。修正しときました。

個人的には「bfでメモリ0番地に整数Nを入れて表示するために必要なステップ数はいくらか。ただし1番以降のメモリは作業用に破壊してかまわない。」という問題が結構面白そうに感じる。

n個の+の羅列を(+n)と表記することにすれば「>(+n)[ < (+m) > -](+c)」でn*m+cを作れるので m * n > m + n + 6 が成立させられる m + n = 8以上ではこの構文を使うほうが短い。ここまでは引用元のソースから読み取れる。問題はどういうタイミングでさらなる掛け算を使うか、ということですな。

んっと。これ同じことの繰り返しか。いや、違うな。
メモリ1番地を作業領域に使うわけだから、掛け算の片方に関してはさらに掛け算をすることが出来るけども、もう片方は作業領域の取り方を変えないと衝突してしまうか。あと、きれいな掛け算にならないときにどうやって調節するかも問題か…。

... by nishio @2005-09-25 17:19

今、このインタプリタが括弧のネストに対応していないことに気がついた。

このページは静的なアーカイブなので新しいコメントは受け付けておりません。ご意見ご感想はお気軽にメールでどうぞ。coreblog「あっとまーく」nishiohirokazu.org。
Trackbacks

PageView: 265 Score: 179.13105 このカウンタは2006-03-26 11:05で停止しています。
Powered by COREBlog

NISHIO Hirokazu's website > NISHIO HIROKAZU # Archived COREBlog
Contact me: coreblog"at mark"nishiohirokazu.org
Access counter: This Page:713028 Total:1827739 during 2004/01/23-2006/03/26