我只想和我的朋友玩一会儿,想在Brainfuck给他发短信。作为一个像我这样的程序员,我决定,为什么不写一个快速的脚本为我翻译呢?
考虑到我在日常英语聊天中使用的大多数字符将在0-127之间,算法将取最接近的因子10。然后再加上焦炭数模数这个因子的结果。然后我会把它翻译成Brainfuck。
我准备接受所有的批评,所以请给出你的意见。此外,请测试并找到任何情况下,我的算法将失败。
def letter_to_brainfuck(letter):
num = ord(letter)
return '+'*int(num / 10) + '[>++++++++++<-]>' + '+'*(num % 10)
def brainfuck_print(letter_list):
return ''.join([i +'.>\n' for i in letter_list])
print(brainfuck_print([letter_to_brainfuck(i) for i in list(input())]))发布于 2017-11-03 01:13:45
如果将长文本传递给代码生成器,则生成的程序将使其内存溢出。这是因为你对每个角色都做了>+++.>,但是你再也不会回来清理你身后的东西了。生成的代码应该是>+++.>,而不是>+++.[-]<,它速度更慢,但可以处理任意长的文本。
您说您的文本主要包含ASCII字符。因此,增加或减去字符的差异可能更有效。在伪码中:
curr = 0
for ch in str:
if ch > curr:
emit_add(ch - curr)
if ch < curr:
emit_sub(curr - ch)
emit_putchar()
curr = ch
emit_setzero()仅发出差异对于长时间运行小写ASCII字母是特别有效的。
关于Python代码:您确定Python真的没有重复字符串函数吗?那么,letter_to_brainfuck函数就会变成一个单线。
https://codereview.stackexchange.com/questions/179492
复制相似问题