strelka_dogのブログ

徒然なるままに心に移り行くよしなしごとをそこはかとなく書き尽くるブログ

Brainf*ckのインタプリタをscratchで作った話

scratchとかいうプログラミング教育用教材がありますね。

 

これを見た時ふとscratchで作ったプログラムはフルスクラッチって言えるんじゃね、みたいな(今考えると)激寒ジョークを考え付きました。

 

よし、Twitterでこのジョークを使えばバズるのでは

さて何を作ろう。

そんなに手間じゃなくて何かいかにもフルスクラッチとか言える物……そうだBrainf*ckだ。Brainf*ckを知らない人はこちらで確認してください。

ja.wikipedia.org

要はたった8個の命令だけのプログラミング言語。これならインタプリタの作成くらい楽じゃん。ということで実際に作成しました。作ったものがこれ

寝る前という正常な判断の出来ないタイミングで思いついた激寒ギャグとそんな状態で作った物なので非効率的な部分とかマジックナンバーが登場してますが人に読まれることを想定して書いてないので許して。

 

さて、このブログを読んでくれる人(そもそも存在するのか……)が興味あるとはとてもじゃないが思えないが今回分かったscratchでプログラムを作成する上で注意しなければならないことを一つ書いときます

それは

大文字と小文字を判別してくれない

echoプログラムをテストした時に発覚しました

f:id:strelka_dog:20190519003935p:plain

あれ?入力はhogeなのに出力がHOGEになってる。入力の文字列をアスキーコードに変換する際に

f:id:strelka_dog:20190519004354p:plain

このブロックを使ってたのですが、これがどうやら大文字と小文字を区別しないらしい。だからアスキーコードで最初の方に出るアルファベットの大文字の方の番号を返していたらしい。

さて、どのように対処するか

scratchの仕様ということであきらめるか、

とりあえずググってみると「コスチューム」の名前は大文字と小文字を区別するらしいという知見を得ました。

(コスチュームって何なのか猫が服とか着るのか、その辺はよく分かりませんが)

一回文字をコスチュームの名前とやらに設定してコスチュームの名前を判定してやれば大文字小文字の判別が出来るようです。

f:id:strelka_dog:20190519005033p:plain

こんな感じ

そしたら

f:id:strelka_dog:20190519005214p:plain

ちゃんとhogehogeになりました。

 

以上多分このブログ見てる人でscrath使って何か作ろうなんて人はいないと思いますが役立ったら嬉しいな。

 

最初これをコンパイラとか言ってツイートしてしまいましたがこれはインタプリタです。コンパイラは要は機械語へのインタプリタなのでBrainf*ckならインタプリタ作る感覚で作れるとか書いてあるのを見てこれもscratchで作ってやろうと思いましたが、いかんせん機械語とかアセンブリとか知識は皆無なので断念しました。ちょっと調べた感じBrainf*ckより命令も多くてアセンブリの方が書きやすそうな印象を受けました(入力は難しいのかな?)

 

因みに……

元々はTwitterでバズることを目指していましたが結果はどうだったのか

まぁいつもの自分のツイートに比べれば少しだけ伸びてるけど……うん、スベったね。

ちなみにslckでは反応が皆無でした(スベったね)