(受到对一个老问题的评论的启发。)
背景
一个错误喹(也称为“Kimian喹”)是一种程序,该程序编译或运行时,使编译器/解释器/运行时进行打印,其具有相同的文本到程序本身,而不是其他的错误消息。出于此挑战的目的,我们在广义上定义“错误”,也包括警告。
任务
在这项挑战中,我们正在寻找 奎因这也是一个错误提示。执行时,程序必须正常打印自己的源代码(即,不作为错误/警告消息);这必须是适当的quine(即程序的某些部分必须对输出的不同部分进行编码)。此外,编译和执行程序还必须使实现将程序的源代码(而不是其他任何内容)打印为错误或警告消息。(请注意,这意味着您将无法使用会阻止程序正常执行的语言使用编译时错误。)换句话说,该程序的源代码将被打印两次,每种方法一次。
澄清说明
- 在大多数情况下,很明显什么是错误不是警告消息。我们在这里不区分两者。在模棱两可的情况下,将错误/警告消息定义为实现所输出的任何文本,或者:1.由于执行命令以外的其他原因(或与该语言最接近的等效内容);或2.这不是将其作为输出生成的命令的输入的一部分。
- 信息框的错误/警告部分不必是适当的信息框(尽管在大多数情况下,这是偶然的,因为大多数错误和警告消息都包含大量固定文本)。
- 程序输出多个错误/警告是可以接受的,这些错误/警告在串联在一起时构成程序的源。输出未出现在源代码中的错误/警告是不可接受的。
- 与许多挑战不同,在此挑战中,赋予编译器的开关和程序文件名可能非常相关。鉴于可能无法通过其他方式解决挑战,因此我愿意在这里保持灵活性,尽管如果您以不寻常的方式运行实现,请记住PPCG规则为此收取了字节罚款(等于您需要以最短的“正常”方式在命令行上添加运行程序的权限),因此,您需要在帖子中指定罚款的大小。(例如,如果您使用的解释器从文件中读取程序,并且对文件名没有特别限制,则运行程序的最短的常规方法是从文件名中包含1个字符的文件;因此,
- 您使用的编译器/解释器版本可能是相关的,因此,作为提交的一部分,请说明程序可在其上工作以及需要哪个版本的特定编译器或解释器。(例如,C提交的标题中可能显示“ C(gcc 6.2.0)”。)
- 请注意,并非所有语言都可以完成此任务。在目前使用的语言中,最简单的方法可能是找到错误或警告消息,可以为其自定义文本的某些子集(通过更改消息中引用的内容的名称;文件名是常见的选择)在这里,但不是唯一的)。如果有人发现只使用固定文本的错误和警告消息来做到这一点,我会特别感动(并感到惊讶)。
胜利条件
这是一个 代码高尔夫球挑战,因此,如果条目的字节数较小,则认为该条目更好。这样一来,一旦您的程序完全可以运行,您就希望对其进行优化以尽可能减少字节数。(但是,如果已经有一个较短的条目,尤其是使用另一种语言,请不要气;;我们真正要寻找的是尽可能地缩短程序背后的特定算法或想法,但要看到多个使用不同语言或依赖不同原理的解决方案总是值得的。)