C++ 代码长度或磁带大小:brainf。。。(咀嚼) 使用brainfuck时,磁带大小最好比程序大小长吗?还是反过来更好?

C++ 代码长度或磁带大小:brainf。。。(咀嚼) 使用brainfuck时,磁带大小最好比程序大小长吗?还是反过来更好?,c++,arduino,arduino-uno,brainfuck,C++,Arduino,Arduino Uno,Brainfuck,另外,彼此之间的相对距离有多大? 我想为Arduino做个脑力操翻译。我知道这以前已经做过了,但我正在添加一些东西,比如代码和编写能力 因此,代码相当长,特别是因为我将代码和磁带都存储在阵列中: 字符代码[]={}; 字节磁带[]={}; 内存应该至少由30000个单元组成,一些现有的brainfuck程序确实需要更多的单元,所以这应该是可配置的或无限制的 我知道我永远不会把30000个单元装进一个Uno,但动态内存似乎是从中获得最大空间的方法。任何这样做的方法都值得赞赏 目前,charco

另外,彼此之间的相对距离有多大?

我想为Arduino做个脑力操翻译。我知道这以前已经做过了,但我正在添加一些东西,比如代码和编写能力

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

字符代码[]={};
字节磁带[]={};

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

我知道我永远不会把30000个单元装进一个Uno,但动态内存似乎是从中获得最大空间的方法。任何这样做的方法都值得赞赏

目前,
charcode[512]={}
字节磁带[1024]={}使用“1807字节(88%)的动态内存”,但这只是解释器的草图。我还需要在那里压缩更多的代码。该代码适用于任何感兴趣的人


在你否决投票之前,请问我你是否想知道更多。。。我只是个傻瓜

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

这样,您只存储非0的值(节省内存和分配注意事项),并且您的磁带理论上是无限的(更纯粹的实现

操作图
----------------------------
#代码启动
+            
+            
-            
-            
-            
>+           

是你的朋友。看到你也标记了这个C++。为什么不是一个代码>矢量< /代码>?或者如果你不能使用连续存储器,因为某个原因,一个代码< DEQU>代码>。它的思维速度慢。使用1807字节(88%)的动态内存……不是动态的……而且你的代码,简单地,不存在……)但是是的,链接直接没有代码当前看起来很有趣,谢谢!:)遗憾的是,arduino map函数完全不同:/您可以使用字符或字节数组来节省空间(brainfuck无论如何都会打印字符)。只需来回转换数据。这将在arduino上为您带来10-15k阵列(取决于您的谨慎程度)。
operation    map
----------------------------
#code_start  <>
+            <0 : 1>
+            <0 : 2>
-            <0 : 1>
-            <>
-            <0 : -1>
>+           <0 : -1, 1 : 1>
<<-          <-1 : -1, 0 : -1, 1 : 1>