Ark's Blog

引っ越しました→ https://blog.arkark.dev/

ようこそ

今すぐBrainf*ckを始めるべき10の理由

この記事はQiitaで書いた記事をはてなブログに移動させたものです→ Internet Archive

この記事はEsolang(難解プログラミング言語) Advent Calendar 2016の4日目です。 深夜テンションでうっかり参加登録ボタンを押してしまった・・・

今流行のBrainf*ckについて「今すぐ○○を始めるべき10の理由」形式で紹介します!

1. 命令数が少ない

命令数はたったの8つ!

><+-.,[]

この8つの文字しか使えません。(他の文字はコメントとして無視されます。)

2. 習得が簡単

前述のとおり命令数が8つなので、その8つの命令さえ覚えればOK!他言語と比べて習得コストが格段に低いですね!!

  • 言語仕様についてはwikipediaをご参照下さい。

3. コードの隠蔽性に優れてる

とりあえずHello Worldのコード

+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-.
------------.<++++++++.--------.+++.------.--------.>+.

始めて見た人は、なんだこれは・・・と感じるかもしれません。実際にこれを実行すると「Hello world!」と出力されます。れっきとしたプログラミング言語ソースコードですよ。

このようにBrainf*ckのコードは可読性が著しく低いです。これぐらい単純なコードなら、Brainf*ckerには容易に読まれてしまいますが、少し複雑なコードになるだけで一気に可読性が損なわれていきます。

つまり、コードの隠蔽性に優れているということです!いやーすごい

4. コンパイラのサイズが小さい

開発者Urban Müllerがコンパイラがなるべく小さくなる言語として考案した。 実際、Müllerが開発したコンパイラのサイズはわずか123バイト、インタプリタは98バイトであった。(Wikipediaより)

Brainf*ckのインタプリタは簡単に作れるので、実際に作ってみるのはどうでしょう。プログラミングの練習にもちょうどいいかと。 なんとBrainf*ckでBrainf*ckのインタプリタを作った方もいらっしゃいます。

5. チューリング完全

Brainf*ckの何がすごいかって、こんなにも言語仕様が単純なのにチューリング完全だということです。つまり、†なんでも†作れます。

6. 派生言語がたくさん

Brainf*ckにはその言語仕様の単純さゆえにたくさんの派生言語が存在します。 いくつか紹介します。

  • BrainCrash : Brainf*ckに少し命令数を増やした言語
  • Ook! : オランウータン向けの言語
  • Nyaruko : \(・ω・\)SAN値!(/・ω・)/ピンチ!

他にもググったら色々出てきます。

7. 入門サイトが充実してる

Brainfuck 入門」とかで検索すると、勉強になるサイトがすぐに見つかります。 おすすめのサイトを以下に紹介します。

8. ゲームが作れる

チューリング完全なので当然ゲームが作れます。 というわけで、実際に作ってみたのがこちら。

9. 競プロで使える言語

これを見てください。

なんと、AtcoderではBrainf*ckが使えます。つまり、Brainf*ckが競プロに使えるということです。

競プロにBrainf*ckが使えます!

大事なことなので2回(ry

10. Brainf*ck向けの問題も存在する

とは言っても競プロの問題をBrainf*ckで解くのは難しい・・・(ただし、不可能ではない) しかし、中にはBrainf*ck向けとでも言えるような問題も存在します。

例えば次の問題。

長さ 12 の文字列 s が与えられます。 s の前半 4 文字と後半 8 文字の間に半角スペースを 1 つ挿入し、出力してください。

Brainf*ckerならかんたんですね!

解答例は次のようになります。

,.,.,.,.>++++[>++++++++<-]>.,.,.,.,.,.,.,.,.>++[>+++++<-]>.
  1. 4回「入力→出力」をする。
  2. ポインタが指す値を32(スペース)にして出力する。
  3. 8回「入力→出力」をする。
  4. ポインタが指す値を10(改行)にして出力する。

これでACが取れました!

f:id:ark4rk:20200326081349p:plain


以上、「今すぐBrainf*ckを始めるべき10の理由」でした! 高級言語もいいですがたまにはEsolangとかに手を出してみるのも面白いですよ

Esolang(難解プログラミング言語) Advent Calendar 2016