Escriba un programa que generará una salida "verdadera" si la entrada coincide con el código fuente del programa, y que genera una salida "falsa" si la entrada no coincide con el código fuente del programa.
Este problema puede describirse como relacionado con quines, ya que el programa debe poder calcular de alguna manera su propio código fuente en el proceso.
Este es el código de golf: se aplican reglas estándar. Su programa no debe acceder a ningún archivo especial, como el archivo de su propio código fuente.
Editar: si así lo elige, verdadero / falso se puede reemplazar con Verdadero / Falso o 1/0.
Ejemplo
Si el código fuente de su programa es bhiofvewoibh46948732));:/)4
, entonces esto es lo que debe hacer su programa:
Entrada (Stdin)
bhiofvewoibh46948732));:/)4
Salida (Stdout)
true
Entrada
(Anything other than your source code)
Salida
false
code-golf
quine
decision-problem
PhiNotPi
fuente
fuente
true
/false
output es un requisito fuerte, o también son aceptables las variaciones (True
/False
,1
/0
)?Respuestas:
JavaScript: 26
No sé si un archivo JavaScript realmente califica como un "programa".
fuente
.toString()
método en JavaScript .f=s=>s=='f='+f
JavaScript ES6, 9 caracteres
Esta es la única forma (de golf) de hacerlo en JS. ES6 solo hace que tome menos personajes
Ejecute esto en la última consola web de Firefox:
Ejemplo de uso:
fuente
f=x=>f==x
y nox=>f==x
, mientras que la versión de Denys Séguret verifica toda la fuente.f=x=>f==x
function f()
f.toSource()
"x=>f==x"
(básicamente evalúe el código en la consola y luego evalúef.toSource()
en un navegador que admita ese método.x=>f==x
) EDITAR: no importa, se hace referencia a f dentro de la funciónHaskell, 72 caracteres
Nota: no hay un carácter de final de línea al final del guión.
fuente
GolfScript, 11 caracteres
Sin el
=
, este código sería una quine que genera su propio código fuente como una cadena. Esto=
hace que compare esta cadena con su entrada y salida1
si coinciden y0
si no. Tenga en cuenta que la comparación es exacta; en particular, una nueva línea final al final de la entrada hará que falle.Explicación:
{ }
es un bloque de código literal en GolfScript;.
duplica este bloque de código y~
ejecuta la segunda copia (dejando la primera en la pila);`
stringifica el bloque de código y".~"
+ le agrega.~
;=
compara la cadena resultante con la entrada (que el intérprete de GolfScript empuja en la pila como una cadena antes de que comience el programa) y devuelve1
si coinciden y0
si no lo hacen.fuente
Perl,
Infinity4138 PersonajesActualización: el programa ya no termina con una nueva línea, lo que significa que funcionará correctamente en archivos de varias líneas. Debe ingresar la entrada de STDIN sin presionar enter. En Windows solo pude hacer esto leyendo un archivo.
Solución original:
fuente
(cat id.pl; echo foo)|perl id.pl
> <> , 68 bytes
A los peces les encanta comer caca de pescado. Ahora sabemos que pueden distinguir los suyos de los de sus amigos.
¡Puedes probarlo en línea !
fuente
1
a cualquier prefijo del códigoPitón 2, 55
Probado:
a='a=%r;print a%%a==raw_input()';print a%a==raw_input()
->True
(anything else)
->False
fuente
a='a=%r;print a%%a==raw_input()';print a%a==raw_input()
.raw_input()
con__import__('sys').stdin.read()
.print raw_input()==open(__file__).read()
? Tiene solo 40 bytes, usa suraw_input()
enfoque, pero lee su código.Your program must not access any special files, such as the file of its own source code.
JavaScript ES6,
1614 bytesMenos dos bytes gracias a Neil.
31 bytes si debemos tomar la entrada a través del indicador.
38 bytes si debemos emitir mediante alerta.
Esta es la forma correcta de hacerlo, ya que la respuesta de Optimizer no acepta todo el código fuente.
fuente
'$='+$
.;$()
porque la llamada a la función es parte de la quine. Esto también significa que deberá cambiar aprompt
para tener en cuenta la entrada.$=_=>prompt()==`$=${$};$()`;$()
Nodo.js: 54
Lo prueba guardándolo en un archivo
f.js
(el nombre exacto no tiene importancia) y usando(que da como resultado falso) o
(que da como resultado verdadero)
También hice una versión diferente basada en eval:
Ahora son 72 caracteres, intentaré acortar eso cuando tenga tiempo.
fuente
Smalltalk (dialecto Pharo 2.0)
Implemente este método de 41 caracteres en String (formato feo para code-golf):
Luego evalúe esto en un área de trabajo (printIt en la forma tradicional de Smalltalk)
La entrada no se lee desde stdin, es solo una cadena a la que enviamos el mensaje (¿qué más podría ser un programa en Smalltalk?):
Pero estamos haciendo trampa, sourceCode lee algún archivo fuente ...
Aquí hay una variante con 51 caracteres que no:
Y prueba con:
Si una cadena en un espacio de trabajo no se considera una entrada válida, entonces veamos cómo usar algunos cuadros de diálogo en 116 caracteres.
Solo evalúe esta oración:
Como el formato de descompilación incluye CR y TAB, cambiamos eso con Separadores Compactados.
Luego nos saltamos los primeros 7 caracteres que son 'doIt ^'
Finalmente, una variante de 105 caracteres que usa stdin, solo interpreta esta oración desde la línea de comandos, solo para sentirte más convencional:
fuente
flex - 312 caracteres
Probablemente se puede acortar, pero funciona con entrada de varias líneas (necesario ya que el código fuente es de varias líneas) e incluso para entradas que contienen el programa como una subcadena. Parece que muchas de las respuestas hasta ahora fallan en una o ambas.
Compilar comando:
flex id.l && gcc -lfl lex.yy.c
fuente
D (133 caracteres)
fuente
JavaScript (V8), 35
llame
i()
y le pedirá entradafuente
+[]
debería ser opcional ya que JS lo auto-GolfScript - 26
Inspirado en http://esolangs.org/wiki/GolfScript#Examples
Otra version:
Lástima que
\
sea a la vez intercambio y escape ...fuente
Python 2, 47 bytes
Una quine simple con el cheque agregado.
fuente
print
es una función es Python 3. Tendría que hacerloprint(_%%_==input())';print(_%_==input())
o cambiarlo a Python 2.CJam , 12 bytes
Pruébalo en línea!
Explicación
Esto solo usa el marco estándar de CJam quine.
Lo que hace el bloque:
fuente
Tcl, 111 caracteres
fuente
Perl, 52 char
fuente
Python, 187 bytes
Cuidado de no agregar nueva línea al final. Alguien con un mejor Python-fu podría acortarlo.
fuente
C=chr
para soltar varios bytes. Además, acorte el nombre de la variablecode
.Casco , 11 bytes
Pruébalo en línea!
Explicación
La explicación se utiliza
¨
para delimitar cadenas (para evitar escapes ilegibles):Al eliminar la función
=
, puede verificar que de hecho solo coincida con la fuente misma.fuente
> <> , 24 bytes
Pruébalo en línea!
Ajustar literal de cadena seguido de verificar si la entrada es idéntica a la pila, con una comprobación final de que no hay más entrada.
fuente
Jalea , 10 bytes
Pruébalo en línea!
fuente
05AB1E , 15 bytes
Modifica la quine predeterminada
0"D34çý"D34çý
agregandoQ
(verifique la igualdad con la entrada implícita)Pruébalo en línea.
Explicación:
Genial alternativa de 15 bytes proporcionada por @Grimy :
Pruébalo en línea.
Explicación:
fuente
187745012D27BJQ
Es un empate.C -
186176 caracteresUn trazador de líneas:
Con espacios en blanco (tenga en cuenta que esto rompe el programa):
fuente
Python 2 , 40 bytes
Pruébalo en línea!
fuente
Stax , 26 bytes
Ejecutar y depurarlo
fuente
q, 8 bytes
Devuelve un valor booleano en la entrada que coincide con los .zs autorreferenciales
fuente
Rúnico , 11 bytes
Pruébalo en línea!
TIO se actualizó y ya no hay un problema al leer la entrada (y ya no requiere un espacio en blanco al final).
Explicación
La solución de JoKing:
Explicación
fuente
r
eterno"
de la izquierda es el único lugar al que realmente puede ir, porque tenerlo en otro lugar complica las cosas. (Pero justo ahora tuve que ejecutarlo en mi depurador para ver qué estaba haciendo ...)R , 54 bytes
Pruébalo en línea!
body
obtiene el cuerpo de la función (dividiéndola un poco, así que esobody(f)[3]
es todo desdepaste0
adelante) Curiosamente,body
reformatea el código, agrega espacios después de las comas, etc. Por lo tanto, este es un caso raro de una respuesta de R golf con un espacio después de una coma.Esto funciona porque
body(f)
es un objeto de tipolanguage
, y existe unas.character
método para este tipo. Por otro lado,f
yargs(f)
son de tipoclosure
, y no se pueden convertir a tipo de caracteres por lo que puedo decir. Por favor, no me pregunten para qué es el tipo de idioma ...fuente
PowerShell, 28 bytes
Muy similar a esta respuesta de JavaScript , utiliza el proveedor de funciones .
Ejemplo
fuente