Quine / Error Quine Polyglot


14

您的任务很简单:编写一个可以用两种语言运行的程序。在语言1中,它应该是普通的Quine(打印自己的源代码),在语言2中,它应该是错误的Quine(生成与其自身的源代码相同的错误消息)。

这是,因此最短的有效提交(以字节为单位)获胜。

规则:

  • 语言可以任意相似。不允许使用超集/相似版本/相似方言。
  • 错误规则规则与“使错误合格”中的规则相同


是否允许使用BASIC的两种不同方言?
MD XF

@MDXF如果它们具有完全相同的行为,只是输出到STDERR,则否。否则,是的。
硕果累累

所以我的答案是正确的。
MD XF

@MDXF有效。
硕果累累

Answers:


2

Befunge-93(FBBI) / C(tcc),93 + 62 = 155字节

^"
>#001p#"<>:#,_@#1-8*3:-1*57+55-1*79*57:-1:*77**278\-1:*57$p:1: error: declaration expected

在线尝试!:Befunge-93C

感谢randomdude999指出文件名需要匹配的引号才能起作用。

必须保存在文件名下^"\n>#001p#"<>:#,_@#1-8*3:-1*57+55-1*79*57:-1:*77**278\-1:*57$p,其中\n是换行符。因此,用于C的TIO不能完全按预期运行。经测试可在Lubuntu上使用。

说明(C):

该程序无法编译,并且tcc愉快地输出文件名作为其错误消息的一部分。根据代码的开头,您可能会遇到多个编译错误。^开始时给我们一个declaration expected简短的字母,不包含任何有问题的字符如"。另一方面,gcc和clang开发人员非常悲观,他们选择一次输出多个错误,这不是很好,因此我们不使用它们的编译器。

说明(Befunge-93):

由于"命令切换字符串模式,因此Befunge的代码使用方便,因为它们的代码也可用作字符数据。首先,我们执行一些无用的堆栈操作,然后发出p(放置命令)将NUL字符放置在(0,1)处。然后,我们将指令指针反射到左侧,并开始以字符串形式读取所有内容。由于堆栈的LIFO性质,因此必须向左执行此操作。环绕并"再次到达字符后,字符串结束。请注意,NUL字符替换了$字符,在字符串的中间创建一个定界符。然后,我们将3个数字压入堆栈并跳过NUL(因为不幸的是,作为指令运行时,它会挂住解释器)。错误消息的静态部分必须在这里执行。它的大多数字符都是无操作的,但是该p命令使用三个参数(因此为什么我们要压入3个数字,否则将在这里吃掉一部分字符串),而:1字符会将总共4个值压入堆栈,我们用a p和a $(弹出和丢弃)指令进行抵消。然后,执行某种算术以将ASCII码压入^"\n>#001p#",最后循环将所有值作为字符打印出堆栈,直到找到NUL字符并终止。


您需要找到一个支持这种文件名的操作系统并将其列出。我知道Windows不支持。
mbomb007 '19

@ mbomb007据说,Linux通常会接受文件名中的任何可打印字符,除了/。我现在无法测试自己。

1
您使用的是什么版本的tcc?我直接从Arch repos使用0.9.27-3,得到的错误是<define>:1: error: missing terminating " character
randomdude999

1
好了,我找到了TIO上使用的tcc的确切版本,并且得到了相同的错误消息,但前提是文件名的引号匹配。要使此功能正常运行,必须使用无与伦比的引号。这可能会帮助您:Linux也允许文件名中使用换行符。这是在文件名末尾添加换行符和引号的tcc输出:(长链接)。这确实意味着您需要找到一种方法来打印换行符,但是在第二行上打印内容。
randomdude999

@ randomdude999谢谢。我已经更新了解决方案以解决此问题。确实很有趣的是,引号不匹配会导致这样的问题……
否定

0

Applesoft BASIC / Commodore LCD BASIC,13字节

?SYNTAX ERROR

在Apple []仿真器中,RESET按键进入BASIC模式。
在Commodore LCD仿真器中,单击RightArrowEnter进入BASIC应用程序。
请勿同时输入?SYNTAX ERROR全部大写字母,因为它们会自动大写。


2
非竞赛状态保留给以挑战后的语言提交的作品。如果根据规则无效,则将其删除。首先等待OP的确认,因为我认为这应该是有效的(假设它可以工作)。
HyperNeutrino

@HyperNeutrino谢谢,编辑。
MD XF

1
那么,也将不得不怀疑这一点。这个问题,而更残酷比它看起来...
与Orjan约翰森

1
@ØrjanJohansen好吧,我对此不太确定。从技术上讲,Commore LCD没有标准的错误字节流,所以它真的是错误提示吗?
MD XF

1
@ØrjanJohansen 吗?我想这可能意味着无法判断这是否有效。我们可以等待OP的确认吗?
MD XF
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.