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).
print("Hello World!")
también es válido código Ruby