用BrainFuck打印'A'1000次


12

什么是最好的BrainFuck代码(就代码大小而言)才能打印“ A” 1000次?

我的方法是:

  • 将“ A”设置为p [0]
  • 将255设置为p [1]以显示255'A',3次
  • 将235设置为p [1]以显示235'A'

这不是有效的方法,但是我找不到像乘法一样同时使用拖车计数器的方法

有没有比乘法更好的方法?

一个更笼统的问题:是否存在规则以尽可能小的代码对大量数字进行乘法运算?


4
是一个不错的起点。欢迎来到Code高尔夫!:)
FryAmTheEggman

3
我想您只想使用嵌套循环,但我对BF不太了解。您看过Brainfuck提示吗?同样,关于Brainfuck常数的esolangs页面在这里可能是有用的资源。
乔纳森·艾伦

4
我认为您应该阐明最佳的BrainFuck代码。您是在寻找使用最少的+字符还是简洁程度最高的可读性,最优雅的字体?
乔纳森·弗雷希

@Jonathan Allan:是的,这就是这个问题的目的:如何使用嵌套循环。这是一种令人着迷的ASM语言,但我不理解某些方面
Nelson G.19年

我可以在BF上使用此变体-> github.com/gergoerdi/brainfuck64
Shaun Bebbers

Answers:


17

您当前正在使用的方法是39个字节:

>>+++[<-[-<.>]>-]++++[<----->-]<-[-<.>](不包括获取A)(在线试用!

(循环3次,每次将计数器设置为255,然后打印多次,然后减20,再减去1,然后打印多次)

但是,循环250次并每次打印4次要短得多(这要感谢jimmy23013在我原来的loop-4 loop-250 print-1解决方案上进行了优化):

>------[<....>-] (16字节)

如果您的单元是无界的(我假设它们是8位的,否则您可能不会尝试使用255打高尔夫球):

>>++++++++++[<++++++++++[<..........>-]>-] (42个字节)。


不过,这似乎是假设使用8位单元格的
约翰·德沃夏克

2
@JohnDvorak:这个问题提到将单元设置为255是OP可以想到的最有效解决方案的一部分。这似乎很清楚地表明(ab)使用8位单元环绕。
randomdude999

@johnDvorak randomdude999说了什么,但是我确实添加了一种使用10x10x10的方法,以防细胞无界。
HyperNeutrino

250倍....会更短。
jimmy23013

@ jimmy23013 ...不知道我怎么没想到仍然优化了我的10x10x10解决方案来做到这一点。谢谢!
HyperNeutrino

1

47字节(无下溢)

我只是用47个字节来完成此解决方案。我尝试以不同于通常通过在两个值之间使用计数器来节省空间的方式进行操作。假设A已预加载到p [4]中。

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

解释

Place 5 into p[0]
+++++
Loop 5 times to put p[1]=20, p[2]=25
[>++++>+++++<<-]>
Loop 20 times
[>
Move pointer to p[2] and loop 25 times.
Also move p[2] to p[3]

[
Increment p[3] from 0, effectively moving the value from p[2] to p[3]
>+
Print p[4]
>.
Decrement p[2]
<<-]
Shift over to p[3]
>
[
Decrement p[3]
->
Print p[4]
.<
Increment p[2]
<+>]
Move back to p[1] and decrement
<<-
Repeat until p[1] is 0
]

1

获得'A'的数字65的最短方法是>+[+[<]>>+<+]>,然后只需>------[<....>-]在其末尾添加HyperNeutrino 。因此完整的代码变为>+[+[<]>>+<+]>>------[<....>-](30个字节)


您怎么知道这是最短的方法?它肯定较短,但是您确定没有人会找到较短的吗?
Ad Hoc Garf Hunter


@ SriotchilismO'Zaic是的,我并不是说这是最短的笑声
射手座
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.