彩虹尽头的细胞


31

我们都知道,或者至少听说过“ fuckfuck”,这是最著名和最有影响力的神秘语言之一。如今,尽管大多数实现都使用无限磁带,但是UrbanMüller的原始编译器具有30000个单元的磁带。一个鲜为人知的事实*是,磁带的末尾实际上有一个特殊的值,在典型的Brainfuck程序中几乎从未与之交互。

尽管可以使用29999 >s和a 来打印此值,但是Brainfuck .以其简短的解决方案而闻名,因此您的目标是使用最少的字符数打印此值。

*小说

规则:

  • 复习说明:
    • +/ -:递增/递减当前单元格,当255递增时从255缠绕到0,反之亦然
    • </ >:在磁带上左右移动指针
    • .:打印当前单元格的值。
    • []如果单元格的值为0,则跳转到相应的
    • ][如果单元格的值不为0,则跳转到相应的
  • 在这种情况下,,(获取输入)不执行任何操作,因为原始编译器在EOF上保留单元不变,并且该程序不应接收任何输入。
  • 磁带最初以全0填充,但单元30000除外,其中包含未知值
  • 指针从单元格1开始,并应在打印后结束于单元格30000。
  • 细胞对1和30000右左有不确定的行为,所以解决方案应该不能访问这些细胞。
  • 请注意,30000 的值可能是0,因此简单地循环直到您击中非零单元格都将无效。
  • 您应该打印单元格30000处的值
  • 最短的解决方案获胜!
    • 决胜局是更高效的程序(以最少的步骤执行),其次是最快的提交时间。

提示: Esolanging Fruit建议使用https://copy.sh/brainfuck来测试您的代码。规范如本挑战中所述,您可以选择该abort选项,以便程序在越界时暂停。


沙盒(已删除)
Jo King

3
1个字节:.。我赢了。
硕果累累'18

1
@EsolangingFruit让我妄想吧……
Jo King

1
我建议将规则更改为“最初,所有单元格的值均为0,最后一个单元格的值未知”。
user202729'3

4
给执行此操作的任何人的提示:copy.sh/brainfuck可能是执行此操作的最佳站点,因为它按照本挑战所述实现了BF,并且默认情况下具有30k磁带。向右移动超过磁带的末端会导致解释器挂起。
硕果累累'18

Answers:


17

54字节

------[>+++<--]>[->----[-[->+<]<[->+<]>>]<]>>>>>>>>>>.

119 x 252 =29988。直接嵌套循环。

我使用此工具来验证指针是否在29999处停止。


12

50字节

>+[>+[<]>->+]>-<<[>>-------[[>]+[<]>-]<<-]>>>[>]>.

在这里尝试!

第一部分(>+[>+[<]>->+]>-<<)将磁带设置为

0*12 121' 0 110

下一部分([>>-------[[>]+[<]>-]<<-])重复121次,1每次将249 s 追加到磁带的末尾。如果您快速掌握数学知识,则可能会意识到121 * 249的结果是30129 1s,但是第一次迭代有剩余的110可以处理,并且仅将(110-7)103 1s 追加到磁带上,这意味着只有29983 1s。最终的磁带如下所示:

0*12 0' 0 0 1*29983 0 ???

并最终>>>[>]>.打印出该值。

注意其他一些算法:

  • 252 * 119 = 29988(也为50字节)
  • 163 * 184 = 29992(56字节)
  • 204 * 147 = 29988(60字节)
  • 153 * 196 = 29988(56字节)
  • 191 * 157 = 29987(57字节)
  • 254 * 118 = 29972(56字节)
    • 我认为这是下一个最接近跳动50的字节,因为多余的字节基本上只是经过额外的距离。如果我能找到一种算法,该算法可以生成118个并且行进超过14个像元,则可以击败它。

3

81

-[+>+[<]>++]<<+[-->-[-<]>]>-[>[->+[[->+<]<]>>>]<[-<<+>>]<<<-]>-------[[->+<]>-]>.

这将移动150个单元200次。

这比我希望的要长得多,而且打高尔夫球存在严重障碍:

我不再知道我为什么工作。

零星的补偿金到处都是,有些补偿金可能会抵消。我已经添加和删除了各个段,以至于我不再记得为什么将某些内容放在它们的位置(例如,为什么第一部分将磁带单元初始化为199和151而不是200和150?)。

无论如何,这是我对这种怪兽的评论版本,希望我(或其他人)会发现它们有用:

-[+>+[<]>++]<<+[-->-[-<]>]>-

0 0 0 199' 155

[
  n' k 0
  >[
    n k' j
    ->+[[->+<]<]>
    0' n k-1 j+1 OR
    n 0 0' j+1
    >>
  ]
  0*k n 0 0 k 0'
  <[-<<+>>]<<<-
  0*k n-1' k
]
>-------[[->+<]>-]>.

这实际上不会打印该值,并且如果该值是正数,它将溢出。但是,这是一次伟大的尝试
Jo King

然后添加.,对您有帮助吗?
user202729'3

1
@JoKing修复了该问题。
Esolanging Fruit '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.