1

Brainfuck では、プログラム サイズよりも長いテープ サイズを使用するのが最適ですか? それとも逆の方がいいですか?

また、お互いにどのくらいの大きさですか?

私は Arduino 用のブレイン インタープリターを作ろうとしています。これは以前にも行われたことは知っていますが、Adafruit ディスプレイやコード作成機能などを追加しています。

このため、特にコードとテープの両方を配列に格納しているため、コードは非常に長くなります。

char code[] = {};
byte tape[] = {};

メモリは少なくとも 30000 個のセルで構成する必要があります。一部の既存の頭脳明晰プログラムにはそれ以上のセルが必要なため、これは構成可能または無制限にする必要があります。

30000 個のセルを Uno に収めることは決してできないことはわかっていますが、動的メモリが最大のスペースを確保する方法のようです。これを行う方法は何でも感謝します。

現在、「1,807 バイト (88%) の動的メモリ」を使用していますが、それは単なるインタープリターのスケッチですchar code[512] = {};byte tape[1024] = {};そこにもいくつかのコードを押しつぶす必要があります。コードは、興味のある人のためにここにあります。

4

1 に答える 1

1

map制限された配列を作成する代わりに、オブジェクトを使用して実装できます。インデックスをキーとして使用し、そのセルの値を値として使用します(ゼロに等しい場合は削除し、そのセルの値が 1 以上に上昇するかゼロ未満に減少する場合は、マップに新しいエントリを作成します) .

そうすれば、0 以外の値のみを保存し (メモリと割り当てに関する考慮事項を節約できます)、理論的に無制限のテープを使用できます (より純粋な実装)。

operation    map
----------------------------
#code_start  <>
+            <0 : 1>
+            <0 : 2>
-            <0 : 1>
-            <>
-            <0 : -1>
>+           <0 : -1, 1 : 1>
<<-          <-1 : -1, 0 : -1, 1 : 1>

マップは、使用したい任意のタイプを含め#include <map>たり作成したりして使用できます。std::map<int, int> map_name

こちらのドキュメントを参照してください: http://www.cplusplus.com/reference/map/map/

于 2016-09-01T08:58:44.990 に答える