けんぼーは留年生スマートフォン用の表示で見るけんぼーは留年生Twitterに書ききれないこととか2014-06-06今日から毎日brainをf*ckしよう数学とか科学とか技術とか※脳姦の話ではありません。brainf*ckってのはプログラミング言語の名前です。所謂「難解プログラミング言語」と呼ばれるプログラミング言語の一種で「コンパイルが楽な言語」として開発されたらしいです。その代わり「分かりやすさ」という部分はバッサリ切り捨ててあります、まぁググれば出て来るんですが、とりあえず言語仕様から解説していきましょう。この言語に使われる記号は8種類しかありません。その8種類をひたすらつないでいくだけの言語です。8種類の記号とその意味は以下のとおりです。Wikipedia)。実際に書いて覚えよう。インタプリタはこの辺にある→BrainFuckインタープリタ:いで庵,[>+>+>+<<<-]>->>+<<[,>]初期状態としてメモリは全て0にセットされていてポインタはその先頭を指している。......先頭には","があるのでまず入力から一バイトだけ取ってくる。さっきのインタプリタだと文字の入力を求められる。"b"を入力したことにしよう。......次の記号は"["だが、現在ポインタの指している箇所の値は0じゃないのでこれはスルー。次に">"があるのでポインタが右へ1つ動く。その次が"+"なのでそこに1を足す。......この後">+"をもう2回繰り返すのでこう。......そして"<"を3回繰り返すのでポインタが丁度元の位置に戻る。......更に"-"でそこの値から1引く。......次に"]"が来るがポインタの値は0ではないのでちょっと前に出て来た"["まで巻き戻る。「最初に入力した値の隣3つに1を加え最初に入力した値からは1を引く」ということをグルグル回って繰り返すわけだ。回ってる内にいつしかこういう状態になる。......元の数は0になり代わりに98(bを示すアスキーコード)が隣に3つ並んでいる。この状態で"]"に来た時初めてループを抜け出すことになる。その次は">->>+"。日本語にすると「1個進んで1を引き、2個進んで1を足す」となる。......そして"<<"。......次"["。0ではないので最初は普通にループの中に入る。ループの中一番目は"."。これは文字を表示するコマンド。メモリの内容は97だがこれはaを示すアスキーコードなのでaが表示される。数値を表示させたいならまた一工夫必要だ。※文字を表示しただけなのでメモリの内容はは変化していないその次は">"でポインタを1つずらす。......ループの終わり"]"だが0ではないのでループは存続する。いうわけでループの先頭に戻りbを表示してポインタを1進めることになる。......ここも0ではないので更にループを繰り返す。cという文字が表示される。......というわけでようやく0に到着したのでループは終わりプログラムも終了だ。標準出力には"abc"という文字列が表示されている。こんな具合なことを繰り返すのがbrainf*ckだ。?楽しいだろう?これでHelloWorldを表示するためには律儀に全ての文字のアスキーコードを+で生成する必要がある。FizzBuzzを実行したかったらまずメモリの値を10進数として表示するプログラムを書くところから考えなければならない。次はbrainf*ckで作ったFizzBuzzとQuineを紹介するかな。月別アーカイブはてなブログをはじめよう!kemboorgさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。