7,23个字符,9个字节
54340045141332401057403
在线尝试!
对于完全由数字组成的语言来说,这是一个相当艰巨的挑战,但是我设法做到了……
这只是7编码中的9个字节。(严格来说,这是8个字节(23××-¼,因为可以省略最后两个尾随的1位)),但是对于PPCG来说,第一次要求舍入到整数个字节实际上是一个优势,因为这意味着多余的尾随1位是必需的,因此不受问题的限制。)可逆的十六进制转储:
00000000: b1c0 2530 b6a0 22f8 1f ..%0.."..
用7编写该程序的主要挑战是将其压缩到10个字节以下(因为不使用0
或1
很难编写7 )。其使用与标准“ Hello world”程序相同的结构:
5434004514133240105 7 403
5434004514133240105命令0-5将文字追加到数据空间
7 开始数据空间的新部分
403将另一个文字附加到数据空间
{隐式:将最后一部分评估为命令}
4个 交换第一个和第二个部分,并在6个之间有一个空白部分,从而
重构将创建第一个部分3 输出的命令
(+一些我们不在乎的效果)
换句话说,我们从创建数据空间的两个部分开始;我们有两个文字,每个文字在那里推送一系列命令。第二部分(它们被推入堆栈式,因此第一次推入=最后弹出)是一个相当随意的命令序列,但是使用命令序列来推入5434004514133240105
(因此产生数据序列5434664574733246765
;在文本中讨论7时,我通常使用普通字体(用于推送文字的命令,对于对应的结果文字,则为粗体)。使用命令序列推入第一部分403
,产生463
。然后将第一部分复制回程序(隐式行为7)。
将463
现在由立即做一些事情,而不是(非粗体)命令,只是把文字(粗体)命令。4
重新排列这些部分,以使我们的“字符串文字”进入第一部分。然后0
执行7最著名的操作:获取一部分数据空间,并重建最有可能创建它的命令序列。在原来的命令序列是所有的情况下0
- 5
这是100%准确的(毫不奇怪,因为这些命令纯粹推送数据,从而留下他们做了什么明显的证据),所以我们得到了我们原来的顺序5434004514133240105
回来。最后,3
打印它。
因此,剩下要看的就是字符串的编码。这具有自己的特定领域语言:
5434004514133240105
5 change encoding: 6 bits per character
43 select character set: digits and common symbols
40 '9'
04 space
51 select character set: uppercase letters
4133240105 'B' 'Y' 'T' 'E' 'S'
(“数字和公共符号”字符集中没有“选择字符集:小写字母”,您必须首先使用其他字符集,因此,我需要使用大写字母使其足够短,以适合有效的10个字符字节限制。)