伪奎因多语种语言检测计数器


11

捆很有趣。多语种也很有趣。存在多语种Quines,但我们可以提高标准。

编写一个文件,其中包含适用于语言α,β和γ的有效程序。当文件以语言α或β程序执行时(可能是在编译后),该程序的输出应与有效提交此竞赛的形式相同。如果您的文件是以语言γ程序执行的,则应输出一个数字。该数字的值是该程序先前执行的链,解释为二进制数。

这种解释可能有点难以理解,因此这里是一个示例。令Α,Β和Γ是分别以语言α,β或γ执行其输入的函数。程序并返回这些程序的输出。令x为该竞赛的有效提交。然后下面的表达式,当我们通过语言β,α,β,α,α,β和γ依次处理x时,将得到41,因为41 10 = 101001 2

Γ(Β(Α(Α(Β(Α(Β(x())))))))

您可能不会假设链中的倒数第二个执行是语言β的执行。如果您的原始提交是直接作为γ语言程序执行的,则应打印0。

您的程序在链中最多16个编译中应表现正确;也就是说,您的程序最后可以打印的最大数量是2 15-1。当然,您的程序可以支持更长的编译链。

这是一项鼓励创意解决方案的人气竞赛。投票总数最高的提交者获胜。


三种语言是否可以相等(即使会大大减少投票)?
Zgarb 2015年

6
@Zgarb我很想看到一种解决方案,其中某些(或全部)语言是平等的。让我们看看如何区分不同的语言。
FUZxxl 2015年

1
...我知道了。:DI太仓促地阅读了挑战。
Zgarb 2015年

@Zgarb相同语言的不同版本如何? magic += Number(System.env.lang_version[-1])
约翰·德沃夏克

1
+1用于使用希腊字母而不是无聊的a,b,c1,2,3=)
瑕疵的

Answers:


13

Python 2,Python 3,> <>(鱼)

#;n0
import sys
x='\\\'\nn#;n0import sysx=v=int(1/2*2)sys.stdout.write(x[4:7]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[7:8]),sys.stdout.write(x[2:3]),sys.stdout.write(x[8:18]),sys.stdout.write(x[2:3]),sys.stdout.write(x[18:20]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[3:4]),sys.stdout.write(x[4:7]),sys.stdout.write(x[7:8]),sys.stdout.write(x[8:18]),sys.stdout.write(x[18:20]),sys.stdout.write(x[20:32]),sys.stdout.write(x[32:851]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[1:2]),sys.stdout.write(x[2:3]),sys.stdout.write(x[20:32]),sys.stdout.write(x[2:3]),sys.stdout.write(x[32:851])n'
v=int(1/2*2)
sys.stdout.write(x[4:7]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[7:8]),sys.stdout.write(x[2:3]),sys.stdout.write(x[8:18]),sys.stdout.write(x[2:3]),sys.stdout.write(x[18:20]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[3:4]),sys.stdout.write(x[4:7]),sys.stdout.write(x[7:8]),sys.stdout.write(x[8:18]),sys.stdout.write(x[18:20]),sys.stdout.write(x[20:32]),sys.stdout.write(x[32:851]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[1:2]),sys.stdout.write(x[2:3]),sys.stdout.write(x[20:32]),sys.stdout.write(x[2:3]),sys.stdout.write(x[32:851])

Python说明

Python 2和Python 3解释器的工作方式类似,不同之处在于v=int(1/2*2)变量获得不同的值(01),因为Python 2使用浮点除法,而Python 3使用整数除法。

在每次运行中,它们都会将表达式+0*2或添加+1*2 到第一行(之后#;n)和x字符串(最后一个写命令之后)。> <>解释器使用第一个加法,Python使用第二个加法来创建正确的奎因。

之后的代码B(A(B(B(x))))

#;n+1*2+0*2+1*2+1*20
import sys
x='\\\'\nn#;n0import sysx=v=int(1/2*2)sys.stdout.write(x[4:7]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[7:8]),sys.stdout.write(x[2:3]),sys.stdout.write(x[8:18]),sys.stdout.write(x[2:3]),sys.stdout.write(x[18:20]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[3:4]),sys.stdout.write(x[4:7]),sys.stdout.write(x[7:8]),sys.stdout.write(x[8:18]),sys.stdout.write(x[18:20]),sys.stdout.write(x[20:32]),sys.stdout.write(x[32:851]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[1:2]),sys.stdout.write(x[2:3]),sys.stdout.write(x[20:32]),sys.stdout.write(x[2:3]),sys.stdout.write(x[32:851])+1*2+0*2+1*2+1*2n'
v=int(1/2*2)
sys.stdout.write(x[4:7]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[7:8]),sys.stdout.write(x[2:3]),sys.stdout.write(x[8:18]),sys.stdout.write(x[2:3]),sys.stdout.write(x[18:20]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[3:4]),sys.stdout.write(x[4:7]),sys.stdout.write(x[7:8]),sys.stdout.write(x[8:18]),sys.stdout.write(x[18:20]),sys.stdout.write(x[20:32]),sys.stdout.write(x[32:851]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[1:2]),sys.stdout.write(x[2:3]),sys.stdout.write(x[20:32]),sys.stdout.write(x[2:3]),sys.stdout.write(x[32:851])

> <>(鱼)说明

当您运行> <>解释器时,代码指针会从#第一行的回绕处弹回,并从第一行的末尾开始,标题West开始将数字压入堆栈。如果一个运算符来了(+*),它将弹出堆栈中的前两个元素,并推回结果。通过这种方法,我们最终获得了先前运行的base2表示(13在前面的示例中)。这是所需的数字,因此我们以输出,n并以终止;


很好
FUZxxl 2015年
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.