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桁の数字も並べ替えることができます。おそらく後で説明します。



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



All Articles