7个,10个字节,27个字符
115160723426754314105574033
在线尝试!
该程序在磁盘上的打包表示为(xxd
格式):
00000000: 269c 3a71 6f63 308b 7c0d &.:qoc0.|.
说明
在“ 自动保存世界”一书中,我们已经看到了数字的顺序,该顺序是定期打印数字,通过使用非常古老的语言使其变得有趣。不过,许多新语言都有其自身的曲折,这使这一挑战变得有趣。(是的,这一段,实际上是我开始编写此答案的原因,实际上只是一种将所有相关挑战显示在侧边栏中的方法;通常人们使用注释来做到这一点,但我没有足够的代表)
要注意的第一件事是7完全由数字组成,因此这里的奖金不太可能起作用(尽管如果您将程序视为八位字节序列,则它们都不对应于任何原始数字的ASCII表示形式,因此您可以从这种意义上领取奖金)。接下来要注意的是,7具有重新创建可能产生特定数据的命令序列的命令;所以我们可以解释一下丢失的数字4815162342
为7程序本身的一部分?
答案是“不太”。最有问题的部分是第二个数字8
。八进制编写了7个程序;没有数字8。因此,字符串的开头必须以不同的方式打印。
因此,该程序的基础是基于7个“ Hello world”程序的:
5431410557403
543141055 string literal
7 separate data from code
4 rearrange stack: {program's source}, empty element, {literal}
0 escape {the literal}, appending it to {the empty element}
3 output {the escaped literal}, pop {the program's source}
转义文字使用特定领域的语言,其解释如下:
5 output format: US-TTY using pairs of digits in the string
43 select character set: digits and common symbols
14 "4"
10 "8"
55 forget the set output format
之后,一个extra 3
,输出剩余的堆栈元素(并由于剩余堆栈不足而退出)。该元素是在程序开始时指定的,为了避免不匹配6
(它有点像一个右括号),我们使用代码生成它,而不是直接将其写为数据。(请注意,7
程序的开头有两个隐含字符,与此处相关):
{77}115160723426
7 empty stack element
7 11516 append "1151"
0 append "6"
723246 append "2324"
产生以下文字:
115162324
1 set output format: literally as octal
15162324 "15162324"
被打印出来。