gpt4 book ai didi

c++ - 代码长度或磁带大小 : brainf. .. (munged)

转载 作者:行者123 更新时间:2023-11-30 05:23:20 32 4
gpt4 key购买 nike

用 brainfuck 最好是让磁带大小比程序大小长吗?还是反过来更好?

另外,相对于彼此有多大?

我正在尝试为 Arduino 制作一个 brainfuck 解释器。我知道这已经完成了,但我正在添加诸如 Adafruit Display 之类的东西。和代码编写能力。

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

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

Memory should consist of at least 30000 cells, some existing brainfuck programs do need more so this should be configurable or unbounded.

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

目前,char code[512] = {};byte tape[1024] = {}; 使用“1,807 字节 (88%) 的动态内存” ,但这只是解释器草图。我还需要在其中压缩更多代码。密码是here对于任何有兴趣的人。

最佳答案

您可以使用 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> 来使用 map 由 std::map<int, int> map_name 创建或者你想使用的任何类型。

请参阅此处的文档:http://www.cplusplus.com/reference/map/map/

关于c++ - 代码长度或磁带大小 : brainf. .. (munged),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39249701/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com