首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Brainfuck译者的文本

Brainfuck译者的文本
EN

Code Review用户
提问于 2017-11-03 00:49:33
回答 1查看 2.4K关注 0票数 7

我只想和我的朋友玩一会儿,想在Brainfuck给他发短信。作为一个像我这样的程序员,我决定,为什么不写一个快速的脚本为我翻译呢?

考虑到我在日常英语聊天中使用的大多数字符将在0-127之间,算法将取最接近的因子10。然后再加上焦炭数模数这个因子的结果。然后我会把它翻译成Brainfuck。

我准备接受所有的批评,所以请给出你的意见。此外,请测试并找到任何情况下,我的算法将失败。

代码语言:javascript
复制
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())]))
EN

回答 1

Code Review用户

回答已采纳

发布于 2017-11-03 01:13:45

如果将长文本传递给代码生成器,则生成的程序将使其内存溢出。这是因为你对每个角色都做了>+++.>,但是你再也不会回来清理你身后的东西了。生成的代码应该是>+++.>,而不是>+++.[-]<,它速度更慢,但可以处理任意长的文本。

您说您的文本主要包含ASCII字符。因此,增加或减去字符的差异可能更有效。在伪码中:

代码语言:javascript
复制
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函数就会变成一个单线。

票数 7
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/179492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档