震惊!竟然有公司在圣诞礼物中放这个!

2018-12-25

本文总阅读量:

虽然没能入职,依然向我要了地址发了圣诞礼物,感谢图森未来

礼物到了我迫不及待的拆开,照了两张照片,没错,就是下面这两张照片

4 5

本来我觉得礼物很不错,毕竟都是吃的,很合我的胃口,连勺都配好了,正准备吃里面的圣诞礼物…

万万没想到的是礼物中居然还有一份儿代码,怕看错了又仔细看了下,嗯…emmm,没错,有高亮有缩进,确定是代码无疑了

1

作为程序员的我异常敏感,需求和考验来了!我放下了手中的勺子,走到了电脑前。

看来目标就是需要进入卡片下方的破译网站,这个网站是个编译器,能把上面圣诞树代码解析出来,网站提示这个代码是用Brainfuck这门语言写的,这语言名字,,,真给劲,,,把这些字符串都敲进去,应该不会很困难吧,于是老眼昏花的我就开始敲,代码如下:

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

我觉得我代码风格还是挺不错的,缩进的很到位,只不过高亮实在是做不到。

马上就要运行代码了,有点学生时代两个人传暗号小纸条的感受,还有点小期待呢。满怀期待的我把代码放到了编译器上运行,结果如下:

2

emmm,这结果不太对吧,看这句话的意思应该是:图森祝你圣诞快乐,机智的我打开了谷歌翻译,果然这句话的英文应该是TuSimple wish you a Merry Christmas!

完了,果然老眼昏花敲错了,敲得时候我就说可别敲错了,这都没法debug。

先去看看语法吧,维基百科讲的还是很清楚的,看完之后我觉得这门语言设计的真不错,果然是wtf。

仔细看了下错误,发现和准确的英文相比其实ASCII码就差了1,比如Dhristmbt应该是Christmas,其中错的三个字符都是差了1,空格和!也是差了1,估计是少打了个符号?

万幸,找到了一个在线Brainfuck调试器,能单步调试的代码都不是事儿

经过调试我发现,[]代表循环结构,其中前面的循环结构都是在给3个连续内存地址赋值初始化,这3个地址按顺序分别用于

  • 存储标点符号的ASCII码
  • 存储大写字母的ASCII码
  • 存储小写字母的ASCII码

如下图所示,#代表断点

3

<>负责向前和向后移动指针,+-负责给当前值加1和减1,.负责打印,也就是从初始化之后(上图的#位置),根据.字符进行分割,不断移动指针和修改ASCII码,一个字母一个字母的打印出了TuSimple!wish!you!a!Nerry!Dhristmbt"

根据上述结论,我发现,,,我根本就没打错,,,代码本来就有三处bug,看来果然是图森的考验,哈哈

修正后的代码如下:

                     >+++++ //多了一个加号
                   +++[<++++>-]>
                  ++++++++[<++++++
                ++>-]>++++++++++[<+++
                  +++++++>-]<<+++++
                +++++++++++++++.>++++
             +++++++++++++.<-.>-----------
             -.++++.+++.----.-------.<<.>
              >++++++++++++++++++.------
        --------.++++++++++.-----------.<<.>>++
            +++++++++++++++.----------.+++
    +++.<<.>>--------------------.<<.>------.>++++.++ //少了一个减号
   +++++++++++..+++++++.<<.>----------.>-------------
----.++++++++++.---------.++++++++++.+.-------.----------
               --.++++++++++++++++++.<<+. //少了一个减号

没有高亮凑合看吧,结果图如下:

4

总算结束了,可以继续吃了,祝图森未来一路顺风,祝大家圣诞节快乐,全剧终。

参考链接