背景
正如大多数PPCG常规人员所知道的,quine是一个程序,在运行时会输出自己的源代码。而两个字符串之间的Levenshtein距离是将一个字符串转换为另一个字符串所需的最小插入,删除和编辑次数。在这个挑战中,我们将两个概念组合成一个“ levenquine”:一个程序输出自己的源代码,但插入,删除或替换一个不同字符的一个字符的一个实例。(换句话说,程序与其输出之间的Levenshtein距离为1。)
任务
编写一个levenquine,使其输出为levenquine,该程序的输出也为levenquine,依此类推。此外,在某些时候,重复运行程序,运行其输出,运行其输出的输出等的顺序最终必须返回到原始程序。
还有一个额外的限制使事情变得更加困难:在此循环内某个地方必须有两个不同的程序,它们没有共同的字符(换句话说,一个程序中没有字符,另一个程序中也没有字符)。因此,您的程序将不得不逐渐将自己转换为其他字符集,然后再次返回。
如果您使用的编程语言在任何产生输出的程序中都具有不可避免的样板(例如,它只有一种编写print
语句的方式,而没有其他有用的输出形式),则可以出于该目的将该样板视为不存在确定两个程序有哪些共同点。但是,为了确定代码的Levenquine属性,您仍然必须计算该样板。
澄清说明
- 循环中的每个“程序”都可以是完整程序或功能。它们不必全部相同,例如,有些可能是完整程序,有些可能是函数。
- 并非周期中的所有程序都需要使用相同形式的输出。例如,有些可以通过标准输出输出,而有些可以通过标准错误输出。
- 您的程序将在没有输入的情况下运行(或以需要输入才能执行任何操作的语言,即最简单的输入)运行。
- 适当的奎规则。尽管Levenquine不是真正的奎因,但是在编写适当的奎因时,您可能不会做任何非法的事情。特别是,空程序永远不会是来自正确的Levenquine的有效输出(因此不能成为您循环的一部分)。
- Levenquine限制是根据字符而不是字节来衡量的(例如,
ê
即使源是用UTF-8编码的,也是一个字符)。不常见字符限制也以字符进行度量。但是,胜利条件以字节为单位。
胜利条件
请从周期中至少提交以下三个程序:最短的程序(以字节为单位);循环中的两个程序没有相同的字符。这些中的两个可能是相同的,并且三个都可能是不同的。分数基于最短程序的字节长度,越短越好,因此成为一种代码高尔夫竞争。