けんぼーは留年生

Twitterに書ききれないこととか

brain f*ckの実行結果を返すTwitterのbotを作りました

タイトルの通りBrainf*ckのコードを送りつけるとその実行結果の標準出力を返してくれるbotを作りました。使い方とか色々まとめておきます。

対応している命令

,(入力)以外の全ての命令に対応しております。,についてもいずれ対応する予定です。

基本の使い方

@brain_fxxk_bot [Brain f*ckのコード]

と送るとコードを実行してその結果をリプライで投げ返してくれます。

長いコードの入力

Brainf*ckだと140字程度では到底足りない場面が出て来ると思いますので複数ツイートをまとめて送るためのシステムがあります。

1.URL

ツイートのURLを貼るとそれがBrainf*ckのコードなら本文に書いた時と同様に処理します。複数のURLを貼った場合それらのコードを連結して処理します。本文にも何かしらコードが書かれていた場合その本文の後ろにURL先の内容を連結します。

2.リプライ

botに送るツイートはbotへのリプライになるため使えませんが、ツイートに貼り付けられたURLのツイートのリプライ先がコードだった場合1番の大本まで辿って上から順に連結したコードを受け取ります。

これら1,2は再帰的に参照されます。図にするとこんな順番でコードを連結します。
f:id:kemboorg:20141119011650p:plain

出力

通常は出力された結果を返しますが、コード内に出力コマンドが含まれていなかった場合はメモリの内容を二桁の16進数で表した行列を140字いっぱい返します。

セキュリティ

Brainf*ckはRubyで書いたインタプリタ上で動きます。メモリはArray、標準出力はツイート用のただの文字列として処理されるのでp***a_runさんの様にシェルコマンドを打たれたりといったリスクはありません。コード内の無限ループについては処理した文字数が10万文字を超えた時点で強制的にストップするようになってます。

今後の展望

やっぱり入力が欲しいので入力コマンドが来たらリプライで尋ねるとかそういう仕組作りたいですね。作りたいですが、例えばループの中にこれがあった場合などかなり厄介めなことになりそうなのでその辺ちょっと練らないといけなさそうです。

その他役立ちそうなリンク

BrainFuckインタープリタ:いで庵


このbotの元に芸術的なBrainf*ckコードが投げられてくることを心よりお待ちしております。
それでは皆様。良きBrainf*ckライフを!