我该如何解码这个程序?

时间:2015-04-01 19:11:16

标签: text decode brainfuck

如何解码这个奇怪的文字?

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

此文本应为程序。

2 个答案:

答案 0 :(得分:1)

该程序输出&#; iloveskypegrab&#39;跑的时候。它是一种极其简化的编程语言,叫做brainfuck。

答案 1 :(得分:1)

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

  

Brainf ** k(将被称为BF)在一组存储器单元(也称为磁带)上运行,每个存储器单元最初设置为零。有一个指针,最初指向第一个存储单元。命令是:

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

除了><+-.,[]之外的所有字符都是注释,并且被BF解释器忽略。
我在这里不会解释太多。让我们一块一块地分开程序:

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

我希望这对你有所帮助!如果出现问题,请告诉我。