我在为codegolf.se实现brainfuck汇编程序时遇到了麻烦。我设法将一个字符串加载到内存中找到它的长度cat it out,打印字符串n次等,但我似乎无法将非小写数字加载到内存中。所以让我们采取以下循环执行一些魔法。 (散列标记是调试标记。)
#,#[>#<[<]<<#+#>>>[>]#,#]<[<]
它从指针512开始,并将字符串作为ascii值写入512之后的点
<小时/> 现在,如果(无论出于何种原因)我希望删除小写字符,它将在psuedo BF中看起来像这样。
#,#[>#<[<]<<#+#>>>[>]#do{,(takes input and assigns it)}
while(input>=96/*Go arbitrarily to the right for this implementation but
make sure that the first non-lowercase number is stored at the index*/)#
//Also be sure to zero out any temporary cells used
<[<]
现在我的问题是,我如何实现这样的while循环,同时只使用512右边的空格作为存储并在以后清除它们。
对于那些好奇的人来说,this是我想在branfuck中解决的问题。
答案 0 :(得分:1)
您的代码可以简化为
,[[<]<+>>[>],]<[<]
(<<+>>
可能是使用在线编译器忘记单元格255的结果
并重复,以产生输出操作:
>.[[<]<->>[>]<.>]<[<]
如果您想以自己的方式使用仅空单元格,则可以执行此操作。但是您需要建立自己的一些协议来定义下一个单元格,例如使用以下单元格保存每个数据单元格,说明与下一个单元格的距离,如下所示:
[..., 104, 5, x, x, x, x, 108, 3, x, x, 102, 2...]
[..., 104 , 5 , x, x, x, x, 108 , 3 , x, x, 102 , 2 ...]
data pointer data pointer data pointer
当x
是一些任意的,非零值时(否则你会使用它)。这个实现类似于链接列表,但请注意它将是空间和代码昂贵。
将单元格缩小,或者在调用它时清理它们,可以使用与[<]
相同的方式完成 - 使用[-]
。这会降低单元格的值,直到达到0 - 然后循环。您可以在结束时迭代字符串 - 然后在清理每个单元格时返回,直到您点击开头(0
或其他保留的数字)。