Los políglotas son programas que son válidos en múltiples lenguajes de programación simultáneamente. La mayoría de estos políglotas están escritos de tal manera que ciertas construcciones de un lenguaje se interpretan como comentarios de otro lenguaje (por ejemplo, #define
en C se interpreta como un comentario en varios lenguajes de secuencias de comandos).
Tengo curiosidad por ver si es posible hacer un políglota no trivial que no contenga comentarios, pero que también cambie inmediatamente cuando elimine cualquier carácter que no sea un espacio en blanco, por lo tanto, le desafío a que proponga dicho programa.
Las reglas concretas son las siguientes:
- (Salida). Su programa debe producir algún resultado en la consola en cada uno de sus idiomas. Es decir, su programa no puede simplemente salir sin imprimir nada.
- (Diferencia). Como una relajación de la definición políglota estándar, la salida del programa puede variar entre idiomas.
- (Errores) Su programa no debe producir ningún error (ampliamente definido) en ninguno de sus idiomas. Para la mayoría de los idiomas, esto se define como devolver un código de salida distinto de cero del compilador y / o intérprete.
- (Restricción). La eliminación de cualquier carácter que no sea un espacio en blanco de su código debería hacer que su programa cambie su comportamiento en cada uno de sus idiomas. El programa puede "cambiar" al volverse inválido para ese idioma o al cambiar la salida que se produce.
- Este es un desafío de código . Winner es el programa que es válido en la mayoría de los lenguajes de programación. Los lazos se romperán a favor de una duración más corta del programa.
La regla de restricción no se aplica a la eliminación de varios caracteres. Es decir, está bien si eliminar varios caracteres simultáneamente no produce cambios para uno de sus idiomas.
Observe que la regla de restricción implica que no puede usar Whitespace como uno de sus idiomas, ya que eliminar cualquier carácter que no sea un espacio en blanco no cambiará el comportamiento del programa Whitespace.
Aquí hay un ejemplo simple de un programa que cumple con todas las restricciones anteriores, para los lenguajes Python 2 y Python 3:
print("Hello World!")
Eliminar cualquier carácter print
hará que ambos idiomas arrojen un NameError
; eliminar cualquier paréntesis o cita arrojará un SyntaxError
, y eliminar cualquiera de los caracteres de cadena cambiará la salida en ambos idiomas. (Tenga en cuenta que print("hello", "world")
es un programa más sutil, pero aún válido según las reglas anteriores).
Este ejemplo es un poco aburrido porque Python 2 y Python 3 son muy similares, por lo que no aceptaré ninguna otra solución que solo use diferentes versiones del mismo lenguaje (especialmente Python 2 y Python 3).
fuente
print("Hello World!")
también es válido código RubyRespuestas:
Bash + GolfScript + CJam
Salida
Golpetazo:
GolfScript:
CJam:
Hay un
\x7f
final de salida de CJam.fuente
Bash + Befunge
imprime 'hola' en befunge.
fuente
bc, GolfScript, Homespring, eh, Octave, Scilab (0 bytes)
Garantizado para cumplir con la regla 4. No es un ganador, pero le iría bien en el desempate.
Salida
antes de Cristo
GolfScript
Homespring
eh
Octava
Scilab
fuente
What?\n?
, por cierto.make: *** No targets. Stop.
GolfScript + PHP + CJam + Mathematica + bc + Pyth + /// + TI-Basic + R + Octave + Matlab + Scilab + Numeric Topline +? Fueue + ¿eh?
En Golscript, PHP, CJam, Mathematica, bc, Pyth, /// y TI-Basic, genera
10
.En R, sale
[1] 10
En Octave, sale
ans = 10
En Matlab y Scilab, da salida
ans = 10
.En la línea superior numérica, sale
0
.Si entiendo Fueue correctamente, genera una nueva línea y luego actúa como un programa cat.
¿En eh ?, sale
fuente
72
a10
, debería imprimirse0
en la línea superior numérica .C ++ y Javascript
La idea es:
C ++: http://codepad.org/SK2wbIDL
Javascript: simplemente copie el código a la consola del navegador
Y un conjunto de soluciones para que satisfaga
Desde el lado de Javascript:
Cambiando
int
,main
oputs
se bloqueará con la lectura de la variable no declarada. Perobool
yHi from C++!
puede ser cambios con seguridad. Vamos a arreglarlo:Si las cadenas son iguales, verifica la existencia de
bool
, de lo contrario, se bloquea sin declararnope
.Ahora, hay 2 puntos y comas finales que se pueden eliminar. El primero se soluciona solo: simplemente elimine la nueva línea antes
int
:El segundo es antes
}
, por lo que necesito algo de constricción, válido en ambos idiomas y que no requiere punto y coma al final en C ++ o forzar un punto y coma en js. Multa:Es imposible omitir punto y coma en js ya que
while
necesita el cuerpo.Entonces el programa en este momento es:
Desde el lado C ++:
Hay 2 problemas:
eval
puede tener cualquier nombre y se puede cambiar todo el código js.Intentaré arreglarlos en unos días.
fuente
CJam + Golfscript
De acuerdo, esto es algo aburrido, pero es un comienzo.
Imprime "0" en ambos idiomas. La eliminación de los
1
causa un error, eliminando las,
impresiones "1" en su lugar.Lo mismo se puede hacer con
1)
o1(
. Hay muchas alternativas(Sí, sé que esto no es código golf)
fuente
C y C ++
C y C ++ son lenguajes diferentes que son casi compatibles entre sí; al contrario de lo que podría escuchar, C ++ no es un superconjunto de C. Consulte http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B para ver algunas diferencias . El ejemplo anterior no es C ++ idiomático, pero funciona y produce la misma salida tanto en C como en C ++.
fuente
0
para C.0
se puede eliminar.gcc -ansi
en x86 (o en muchas otras arquitecturas: lo que sucede es que el valor de retorno deputs
termina en el registro donde el tiempo de ejecución lee el valor para volver de lamain
función).JavaScipt, Lua, R y Python 3 - 24 bytes
Puede funcionar en otros idiomas, lo probaré más tarde.
JavaScript fue probado en la consola de Firefox y los otros idiomas aquí , aquí y aquí
fuente
Perl + Ruby + Python
Creo que en PHP esto necesitaría un punto y coma si está ejecutando con
-R
.fuente
Bash + sh + zsh + ksh, 4 bytes:
Realmente simple y satisface todas las reglas:
fuente
Bash + sh + zsh + ksh + Windows Batch, 4 bytes:
Realmente simple y satisface todas las reglas:
Emite una nueva línea que no varía en cada uno de los idiomas (pero Windows Batch, que emite
ECHO is on
, en el idioma que usa), no produce errores, excepto cuando se elimina o cambia cualquier letra.fuente