我刚刚了解了Brainfuck的基本语法,并试图通过编写“Hello World”脚本来快速挑战自己。此刻,我几乎收到了所有的信件,直到打招呼“o”。据我所知,o
的ASCII代码是111
。这是我的代码来获取该数字并打印o:
+++++[>>++<<-][-]>>+[<<+++++[>>>++<<<-]>>-]>+.
打破它,我通过操作2 * 5 + 1将[2]设置为11。然后,我每增加[2]减少10到[3],所以11次。这应该是110,所以我在打印前添加一个。但是,我一直在使用ASCII码91或Hell[
。我哪里出错了?
提前谢谢!
编辑:我刚开始将它改为6 +,现在它有效吗?即使那将是13 * 10 + 1 = 131,而不是11? Hmmmmmmm
答案 0 :(得分:1)
我知道Brainf * ck并不关心缩进和事情。但是你应该考虑缩进代码,因为这样可以更容易阅读。
让我们看看您的代码:
+++++ intialize counter (cell #0) to 5
[ use loop to set cell #2 to 10
>>++ add 2 to cell #2
<<-
]
[-] does actually nothing
>>+ add 1 to cell #2
[ use outside with cell #2 as counter
<<+++++ sets cell #0 to 5
[ use inner loop to add 10 to cell #3
>>>++
<<<-
]
>>-
]
>+. add 1 to cell #3 and print result
您的代码实际上按预期工作,不工作的原因可能是,在此部分之前执行的代码将单元格设置为其他初始值。
很多代码只需要打印一个&#39; o,你可以在第二个单元格的第一个循环之后打印它,不需要第二个循环。 这是打印&#34; Hello World&#34;的一个例子。与Brainf * ck:
+++++ +++++ initialize counter (cell #0) to 10
[ use loop to set 70/100/30/10
> +++++ ++ add 7 to cell #1
> +++++ +++++ add 10 to cell #2
> +++ add 3 to cell #3
> + add 1 to cell #4
<<<< - decrement counter (cell #0)
]
> ++ . print 'H'
> + . print 'e'
+++++ ++ . print 'l'
. print 'l'
+++ . print 'o'
> ++ . print ' '
<< +++++ +++++ +++++ . print 'W'
> . print 'o'
+++ . print 'r'
----- - . print 'l'
----- --- . print 'd'
> + . print '!'
> . print '\n'
以下网站可以通过测试您的Brainf * ck代码来帮助您: Brainfck Visualizer
答案 1 :(得分:1)
我只是试着在我的(自编程的)Brainfuck解释器中运行它,我得到了'o'
,就像你期望的那样。所以也许你的翻译有问题。
您的问题的另一个可能(更有可能!)的原因是,您的单元格之前已被使用过,并且仍然具有不等于零的值。我猜它们之前已被使用过,因为你只在这里显示了一小部分代码(你已经打印过'hell'
(非常有趣的方式是xD),你跳过cell[1]
)。
我个人将ASCII表分成16个字符的块。因此,如果我想得到一个特定的字符,我多16
3
(对于数字),4
(对于大写字母)或6
(对于小写字母)。但是对于某些字母,如果{&#34}更快&#34;我16
或5
多7
。 (较短的代码)。 'o'
例如,我会这样:
++++ write 4 in cell(0)
[ while cell(0) != 0
>++++ write 4 in cell(1)
[ while cell(1) != 0
>+++++++ add 7 to cell(2)
<- decrement cell(1)
] go back to 'while cell(1) != 0'
<- decrement cell(0)
] go back to 'while cell(0) != 0'
>> go to cell(2) (has value 4*4*7 = 0x70 or 'p')
- decrement cell(2) (it's an 'o' now)
. print cell(2)