代码长度或磁带大小:brainf..(加上参数)

Code length or tape size: brainf... (munged)

本文关键字:brainf 参数 磁带 代码      更新时间:2023-10-16

是最好有一个较长的磁带大小比程序大小与脑操?还是反过来更好?

还有,相对于彼此有多大?

我正试图为Arduino做一个脑操解释器。我知道以前有人这样做过,但我增加了Adafruit显示和代码编写能力等功能。

因此,代码相当长,特别是因为我将代码和磁带都存储在数组中:

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

内存应该由至少30000个单元组成,一些现有的脑操程序确实需要更多,所以这应该是可配置的或无限制的。

我知道我永远不会把30000个单元格塞进一个Uno,但动态内存似乎是最大限度地利用它的方法。无论如何,我都很感激。

目前,char code[512] = {};byte tape[1024] = {};使用了"1807字节(88%)的动态内存",但这只是解释器草图。我还需要压缩更多的代码。有兴趣的人可以在这里查看代码

您可以使用map对象来实现它,而不是创建一个有限的数组。将索引用作,并将该单元格中的值用作(如果该值等于0则将其删除,如果该单元格的值现在增加到1或更多,或减少到小于0,则在映射中创建一个新条目。

这样你只存储非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/