0

我怎样才能解码这个奇怪的文本?

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

这个文本应该是一个程序。

4

2 回答 2

1

程序运行时输出“iloveskypegrab”。这是一种极其简化的编程语言,称为brainfuck。

于 2015-04-01T19:15:19.930 回答
1

正如 Torkoal 的回答所说,它在运行时确实会打印iloveskypegrab出来。让我确切地解释一下这个程序的作用:

Brainf**k(将被称为 BF)对存储单元阵列(也称为磁带)进行操作,每个存储单元最初都设置为零。有一个指针,最初指向第一个存储单元。命令是:

  • > 将指针向右移动
  • < 向左移动指针
  • + 增加指针下的内存单元
  • - 递减指针下的内存单元
  • . 输出指针处单元格所表示的字符
  • , 输入一个字符并将其存储在指针处的单元格中
  • []如果指针下的单元格为 0,则 跳过匹配项
  • ][如果指针下的单元格非零,则 跳回匹配

除了注释之外的所有字符><+-.,[]都被 BF 解释器忽略。
我不会在这里过多解释。让我们逐个拆分程序:

  • +[----->+++<]
    这是一个简单循环的示例。它在当前单元格中加一,然后(因为它不是零)进入括号。它从该单元格中减去 5,将指针向右移动一个空格,加上 3,然后向后移动。
  • >++.
    这会将指针向右移动 1,加 2,然后输出当前单元格。它使i.
  • +++.+++.
    加3,输出,比加3,再输出。这将输出lo.
  • +++++++.
    加 7,输出字符。这返回v
  • +[->+++<]
    加 1,然后在循环内,减 1,然后向右移动,加 3,然后向后移动。因为在减去所有内容之前单元格不会为零,因此它会运行多次,并且是快速向单元格添加大量数字的有用方法。
  • >.
    输出我们在最后一个循环中添加的单元格。这返回e
  • [--->+<]
    继续从其中的单元格中减去 3 e。虽然它不是零,但在右侧的单元格中加一。
  • >----.
    向右移动,减去 4,然后输出。这是s.
  • --------.
    从该单元格中减去 8,然后再次输出。这打印一个k.
  • [--->+<]
    和以前一样:继续减去 3,虽然它不为零,但在单元格中加 1。
  • >.
    还是一样:向右移动并打印单元格。这打印y
  • ---------.
    减 9. 输出。这使得p.
  • ----------.
    减10,输出。打印e
  • ++.+++++++++++.
    现在这应该很清楚了。打印gr
  • +++[->+++<]
    更多循环 - 加 3,然后不断减 1,然后将 3 加到右侧的单元格中。
  • >++.+.
    向右移。加2,输出,加1,输出。输出ab

我希望这对你有帮助!让我知道是否有问题。

于 2015-04-20T16:03:37.517 回答