在brainfuck中有效实现while循环

时间:2016-07-31 02:35:42

标签: while-loop brainfuck esoteric-languages

我在为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中解决的问题。

1 个答案:

答案 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或其他保留的数字)。

相关问题