程序A:
"iQ ²¯24
G²õ@i'#+Xd"iQ ²¯24
G²õ@i'#+Xd
程序B的长度超过8kB,以至于链接断开,因此我不会粘贴整个内容。这是一个示例:
#þ"iQ ²¯24
G²õ@i'#+Xd"iQ ²,#ÿ"iQ ²¯24
G²õ@i'#+Xd"iQ ²,#Ā"iQ ²¯24
G²õ@i'#+Xd"iQ ²
我找不到使NUL
字节工作的方法,这就是为什么程序B只有255个唯一字符的原因。程序B本质上由一个程序的255个副本组成,其中每次更改单个无关字节,并且忽略前254个执行。
为了说明,我会开始这个 A的简化版,使得所得B是更易于讨论。
"iQ ²¯23
3õ@i'#+Xd"iQ ²¯23
3õ@i'#+Xd
该程序基于具有基本有效负载能力的Japt quine。开头的字符串包含该程序其余部分的副本,iQ ²
插入引号和副本以创建整个程序的字符串表示形式,然后¯23
修剪自身及其后的所有内容。结果字符串是一个输出程序A的程序:
"iQ ²¯23
3õ@i'#+Xd"iQ ²
我将此字符串称为U
。
A的最后一行重复U
了一遍,每次都有很小的变化。具体地,对于每个数字X
范围[1...3]
其输出"#c" + U
,其中c
是用则charCode字符X
。Japt的默认行为是输出不带引号且以逗号分隔的字符串,因此这是我们的简化A的输出(请注意,每个#
和之间都有一个不可打印的字节"iQ
:
#"iQ ²¯23
3õ@i'#+Xd"iQ ²,#"iQ ²¯23
3õ@i'#+Xd"iQ ²,#"iQ ²¯23
3õ@i'#+Xd"iQ ²
我们称这个简化乙。
简化的B具有简单的结构,在#c
和之间交替U
。幸运的是,对于每个答案,每个#c
和U
都被视为用逗号分隔,并且在这种情况下,除了最后一个U
对输出没有影响之外,其他所有行为都是如此。简化B唯一会影响输出的部分是这样的:
"iQ ²¯23
3õ@i'#+Xd"iQ ²
这与U
我们已经知道的输出简体A 相同。
简化A和程序A的唯一区别是[1...3]
实际程序不会为范围生成副本,而是为范围生成副本[1...256]
。这将导致256个版本,#c
每个版本都有不同的字符,尽管最后一个版本“Ā”是一个多字节字符,因此不会添加任何唯一字节,但是除最后一个以外的所有内容都将U
被忽略。