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