1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

可読性なぞ捨てた!言語"brainfuck"

what the F!

なんか面白い言語を見つけたので書こうと思います。他に理由はないです。以上。
名前からして「何を言ってるんだ?」と思われるでしょうが、brainfuckはプログラミング言語の一種であり、難解プログラミング言語"esolang"と呼ばれるモノの一つだそうで、お察しの通り実用性はありません。
esolangってなんだそれって思ったら、冗談言語と呼ばれるもので、wikipedia先生によると

ハッカーの間では嗜み

ah....right?

what the specification!

さて仕様の説明とまいりましょう。
brainfuckは(実質)長さ無制限の配列が1つ用意され、ポインタによって配列を操作していきます。
用意されている命令は8個のみであり、すべての命令は1文字で表されます。明らかに可読性を捨てている

文字 動作 C言語
> ポインタを1進める ptr++
< ポインタを1戻す ptr--
+ ポインタが示す要素を1増やす *ptr++
- ポインタが示す要素を1減らす *ptr--
. ポインタが示す要素を出力 putchar(*ptr)
, 入力された値をポインタの示す要素へ入れる *ptr=getchar()
[ ポインタが示す要素の値が0ならば、対応する"]"までジャンプする while(*ptr){
] 対応する"["までジャンプする }

以上。

HOW TO DO THIS?

実行環境を整えて見ましょう。Windows?知らん

$brew install brainfuck

以上。

THIS IS HELL WORLD?

とりあえずhello worldをしてみましょう

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

実行結果は以下の通り

Hello World!

初見で読める人はまずいないであろうこのコード。

START FROM EASY ONE

"H"のASCIIコードは"72"なので

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

これでHが出力される。「は?」って言われるだろうからもう少し詳しく解説すると

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

1行目の>+++++++++は配列[1]に移動した後、9回要素をインクリメントしている。
2桁目の[<++++++++>-]は配列[0]に移動し、8回要素をインクリメントした後、配列[1]に移動してデクリメント
ここまでで感のいい諸君はお気づきだろうが、つまりは

for(int i=9; !i ;i--){
for(int j=8; !j ;j--){
*ptr++;
}
}

これと全く同じなのである。

SRY BRO...

力尽きたのでこの先は後程書きます・・・

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
1
Help us understand the problem. What are the problem?