5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

谷ゼミの落書き帳Advent Calendar 2019

Day 7

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

Posted at

#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...
力尽きたのでこの先は後程書きます・・・

5
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?