Contadores de detección de idioma poliglota seudoquina

11

Las quines son divertidas. Los políglotas también son divertidos. Existen polígonos quines, pero podemos elevar el listón aún más alto.

Escriba un archivo que contenga un programa válido para los idiomas α, β y γ. Cuando el archivo se ejecuta (posiblemente después de compilarlo) como un programa de lenguaje α o β, la salida del programa tendrá la misma forma que una presentación válida para este concurso. Si su archivo se ejecuta como un programa de lenguaje γ, generará un número. El valor de este número es la cadena de ejecuciones anteriores del programa interpretado como un número binario.

Esta explicación puede ser un poco difícil de entender, así que aquí hay un ejemplo. Supongamos que Α, Β y Γ sean funciones que ejecutan su entrada como lenguaje α, β o γ resp. programa y devuelve la salida de estos programas. Sea x una presentación válida para este concurso. Luego, la siguiente expresión, donde procesamos x a través del lenguaje β, α, β, α, α, β y γ en este orden, dará 41, ya que 41 10 = 101001 2 .

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

No puede suponer que la penúltima ejecución en la cadena es una ejecución en lenguaje β. Para el caso donde su envío original se ejecuta directamente como un programa de lenguaje γ, imprimirá 0.

Su programa se comportará correctamente para hasta dieciséis compilaciones en la cadena; es decir, el número más alto que su programa podría imprimir al final es 2 15 - 1. Por supuesto, su programa puede soportar cadenas de compilación más largas.

Este es un concurso de popularidad para fomentar soluciones creativas. La presentación con el mayor número de votos gana.

FUZxxl
fuente
¿Pueden los tres idiomas ser iguales (aunque reduciría drásticamente los votos positivos)?
Zgarb
66
@Zgarb Me encantaría ver una solución en la que algunos (o todos) los idiomas sean iguales. Veamos cómo logras distinguir idiomas iguales.
FUZxxl
1
...Veo. : DI leí el desafío demasiado apresuradamente.
Zgarb
@ Zgarb ¿qué tal diferentes versiones del mismo idioma? magic += Number(System.env.lang_version[-1])
John Dvorak
1
+1 por usar letras griegas en lugar de aburridas a,b,co 1,2,3=)
error

Respuestas:

13

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

#;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])

Explicación de Python

Los intérpretes de Python 2 y Python 3 funcionan de manera similar, excepto que la v=int(1/2*2)variable obtiene valores diferentes ( 0y 1) ya que Python 2 usa división flotante y Python 3 usa división entera.

En cada ejecución agregan la expresión +0*2o +1*2 a la primera línea (después #;n) y a la xcadena (después del último comando de escritura). El intérprete> <> usa la primera adición y las Pitones usan la segunda para crear las quines correctas.

Código después de 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])

> <> Explicación (pescado)

Cuando ejecuta el intérprete> <>, el puntero del código se recupera de las #envolturas alrededor de la primera línea y comienza desde el final de la primera línea y hacia el oeste comienza a insertar números en la pila. Si viene un operador ( +o *) saca los dos elementos superiores de la pila y hace retroceder el resultado. Con este método, terminamos con la representación en base2 de las ejecuciones anteriores ( 13en el ejemplo anterior). Este es el número deseado, así que lo sacamos y terminamos ncon ;.

randomra
fuente
Esto es muy lindo
FUZxxl