Brainfuckで数字を並べ替える

この記事では、Brainfuckで数字を並べ替える方法を紹介します。

プログラムを呼び出した後、数字を昇順で表示した後、数字を入力します(各数字は8ビットバージョンのインタープリターで255回を超えてはなりません)。

これは、次のように機能するカウントソートの実装になります。
1.数値kが読み取られます。
2.配列Aで、A [k]を1つ増やします。
3.入力番号がなくなるまで手順1と2を繰り返します。
4. A [i]に数字iを掛けます。iは数字kの可能な値です。


さあ始めましょう


改行(ascii 10)を取得するまで文字を読み取ります

,----- ----- [ ----- ----- ----- ----- ----- ---     28 *     * ,----- ----- ] 


次に、検討した値にポインターを移動する必要があります。

  [->+<]>       [ [->+<]    i-   i + 1 +>-  i- ,    ,   ] 


その後、ポインターは、入力した文字の元の値に等しいセル上にあります。 最初のセルから始まり、ポインタが単位で満たされる前のセルで終わるすべてのセル-これは、ゼロのセルに戻るのに役立ちます。

さて、アルゴリズムの2番目のステップに従って、セルの値を大きくします。

  >>>>> >>>>> + <<<<< <<<<< 


注:10セルのシフトは偶然ではありません。それなしでは何が起こるかを考えてください。

次に、ゼロセルに移動します。

  <[-<]  ,    


したがって、アルゴリズムの最初の3つのステップを実装することで得られたものです。

 ,---------- [ ----- ----- ----- ----- ----- --- [->+<]> [ [->+<] +>- ] >>>>> >>>>> + <<<<< <<<<< <[-<] ,----- ----- ] 


応答出力


最も重要なことは、ソートされた数字を表示することです。

しかし、私たちの数字はどこにありますか?

ASCIIコード「0」は48です。
読み取り後、10を減算し、さらに28を減算しました。
読み取り値を最初のセルに移動しました。
しかし、セルを拡張する前に、10個のセルを進めました。
48-10-28 + 1 + 10 = 21
したがって、ゼロの数は21番目のセルにあり、ユニットの数は22番目のセルにあります。

20番目のセルを48に設定します(これはASCIIゼロコードです)。
前のセルの値を現在のセルの値と同じ回数だけ表示します。
現在のセルに前の値+ 1を割り当てます。
これを数字ごとに行います。

 >>>>> >>>>> >>>>> >>>>>   20  ++++++++ ++++++++ ++++++++ ++++++++ ++++++++ ++++++++    48 >[<.>-] <[->+<]>+ ,     >[<.>-] <[->+<]>+ >[<.>-] <[->+<]>+ >[<.>-] <[->+<]>+ >[<.>-] <[->+<]>+ >[<.>-] <[->+<]>+ >[<.>-] <[->+<]>+ >[<.>-] <[->+<]>+ >[<.>-] <[->+<]>+ >[<.>-]  ,     


まとめ


これがコード全体です
 ,---------- [ ----- ----- ----- ----- ----- --- [->+<]> [ [->+<] +>-] >>>>> >>>>> + <<<<< <<<<< <[-<] ,----- ----- ] >>>>> >>>>> >>>>> >>>>> ++++++++ ++++++++ ++++++++ ++++++++ ++++++++ ++++++++ >[<.>-] <[->+<]>+ >[<.>-] <[->+<]>+ >[<.>-] <[->+<]>+ >[<.>-] <[->+<]>+ >[<.>-] <[->+<]>+ >[<.>-] <[->+<]>+ >[<.>-] <[->+<]>+ >[<.>-] <[->+<]>+ >[<.>-] <[->+<]>+ >[<.>-] 


このような簡単な方法で、数値をソートしました。
ほとんどすべての文字がソートされるようにコードを変更するか、降順で数字を表示するのは簡単です。 このアイデアを使用すると、数字だけでなく、2〜3桁の数字も並べ替えることができます。おそらく後で説明します。

ご清聴ありがとうございました。

Source: https://habr.com/ru/post/J135262/


All Articles