在brainfuck中有效实现while循环

Roh*_*ala 5 esoteric-languages while-loop brainfuck

我在为codegolf.se实现brainfuck汇编程序时遇到了麻烦.我设法将一个字符串加载到内存中找到它的长度cat it out,打印字符串n次等,但我似乎无法将非小写数字加载到内存中.所以让我们采取以下循环执行一些魔法.(散列标记是调试标记.)

#,#[>#<[<]<<#+#>>>[>]#,#]<[<] 
Run Code Online (Sandbox Code Playgroud)

它从指针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
<[<] 
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,我如何实现这样的while循环,同时只使用512右边的空格作为存储并在以后清除它们.

对于那些好奇的人来说,是我想在branfuck中解决的问题.

Uri*_*iel 2

您的代码可以简化为

,[[<]<+>>[>],]<[<]
Run Code Online (Sandbox Code Playgroud)

(这<<+>>可能是使用在线编译器忘记单元格 255 的结果)

并重复,产生输出操作:

>.[[<]<->>[>]<.>]<[<]
Run Code Online (Sandbox Code Playgroud)

如果您只想以您的方式使用空单元格,您可以这样做。但是您需要建立一些自己的协议来定义下一个单元格,例如使用以下单元格保存每个数据单元格,说明与下一个单元格的距离,如下所示:

[..., 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
Run Code Online (Sandbox Code Playgroud)

什么时候x是任意的非零值(否则你会使用它)。这个实现有点像链表,但请注意,它会占用空间和代码


将单元归零,或者您称之为清理它们,可以按照与您相同的方式完成[<]- 通过使用[-]. 这将减少单元格的值,直到达到 0,然后循环输出。当您到达末尾时,您可以向下迭代字符串 - 然后返回并清理每个单元格,直到到达开头(0或您放置在那里的其他保留数字)。