LoginSignup
0
0

More than 1 year has passed since last update.

Brainfuckで使えるかもしれないテクニック

Last updated at Posted at 2022-12-02

brainfuckで使えそうなテクニック集です。
説明は抜きにただ動作だけを書いてます。
配列の状態に依存するものが多いため必ず動くことは保証しません。

基本テクニック

問答無用でポインタが指し示している値を00にする。

[-]

これはポインタの指し示す値を問答無用で00にします。
なぜならポインタの指し示す値が00でない場合は-が行われて問答無用で00にされるからです。
-+でも良いでしょう。

Brainfuckの配列の状態はこのように変化します。

# ZZ=00~FF

...|ZZ|...
     ^[-]

...|00|...
     ^

ポインタを移動する時にかなり使う構文

[>]

これはポインタが00となるような値を指し示すまで移動します。
<の向きを変えれば逆向きに移動するし、>>などにしたら一つ飛ばしにしてくれます。
可変長のデータ(入力された文字列など)などに対して頻繁に使います。

Brainfuckの配列の状態はこのように変化します。

# NN=01~FF

...|NN|NN|NN|NN|NN|NN|00|NN|NN|00|
     ^[>]

...|NN|NN|NN|NN|NN|NN|00|NN|NN|00|
                       ^

not(簡単)

[[-]>-<]>+

ポインタの指し示す値のnotが隣の要素に入りますが、その時、 自分自身の値は消費されて消滅します

Brainfuckの配列の状態はこのように変化します。

NN=01~FF

{*^=00の場合}
...|00|00|...
     ^[[-]>-<]>+

...|00|01|...
        ^

{*^=NNの場合}
...|NN|00|...
     ^[[-]>-<]>+

...|00|00|...
        ^

not(複雑)

[>]-[<]>>+

ポインタの指し示す値のnotが隣の要素に入ります。
この時、指し示す値が00である場合を除いて、自分自身の値は消費されず保持されます。
これは指し示した値が00である場合に分岐したい場合によく利用します。

NN=01~FF

{*^=00の場合}
...|00|00|00|...
        ^[>]-[<]>>+

...|00|FF|01|...
        ^

{*^=NNの場合}
...|00|NN|00|...
        ^[>]-[<]>>+

...|00|NN|00|...
           ^
0
0
0

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
0
0