Supongamos que tiene 2 idiomas, A
y B
. Una cadena s
es una semiquina A
y B
si cumple las siguientes condiciones:
s
Es una quine en el lenguajeA
.s
es un políglota enA
yB
.- El resultado de ejecutarse
s
como unB
programa es una cadena diferentes'
, que es una quineB
.
El objetivo de este desafío es escribir una semiquina en dos idiomas distintos. Este es el código de golf , por lo que el código más corto gana, con la respuesta más antigua utilizada como un desempate.
Reglas para Quines
Solo se aceptan quines verdaderos . Es decir, debe imprimir el código fuente completo textualmente a STDOUT, sin :
- leyendo su código fuente, directa o indirectamente.
- confiando en un entorno REPL que simplemente evalúa e imprime cada expresión que le da de comer.
- confiando en las características del lenguaje que solo imprimen la fuente en ciertos casos.
- utilizando mensajes de error o STDERR para escribir todo o parte de la línea. (Puede escribir cosas a STDERR o generar advertencias / errores no fatales siempre que STDOUT sea una quine válida y los mensajes de error no formen parte de ella).
Además, su código fuente no debe consistir únicamente en literales (ya sean literales de cadena, literales numéricos, etc.) y / o NOP. Por ejemplo, `12
es un políglota en Jelly y Pyth, pero en Jelly es un NOP y un literal numérico, por lo que no es válido.
Cualquier salida no suprimible (como avisos de derechos de autor, mensajes de inicio / apagado o un avance de línea final) puede ignorarse en la salida en aras de la validez de la quine.
Reglas para políglotas
Los dos idiomas utilizados deben ser claramente diferentes. En particular:
- No deben ser versiones diferentes del mismo lenguaje (por ejemplo, Python 2 frente a Python 3).
- No deben ser dialectos diferentes del mismo idioma (p. Ej. Pascal vs. Delphi).
- Un idioma puede no ser un subconjunto del otro (por ejemplo, C vs. C ++ 1 ).
- Un idioma puede no ser un derivado trivial del otro (por ejemplo, Matlab vs Octave 2 , brainfuck vs boolfuck vs TinyBF vs ShadyAsFuck vs todos los otros derivados triviales de brainfuck).
Reglas misceláneas
- No puede aceptar entradas de STDIN (o cualquier otra fuente). Si el idioma elegido debe tomar entrada, entonces la entrada debe estar vacía (cadena vacía, canalizada desde
/dev/null
, etc.), o la salida del programa no debe depender de la entrada. - Para este desafío, debe escribir un programa completo. No está permitido solicitar código adicional para ejecutar la solución (como asignar y llamar a una función lambda definida en la solución).
1: Sí, sé que C no es realmente un subconjunto de C ++. Sin embargo, está lo suficientemente cerca como para ser considerado uno a los efectos de los políglotas, así que lo estoy contando para este desafío.
2: Al igual que el punto 1 anterior, aunque Octave técnicamente no es 100% compatible con Matlab, fue diseñado para ser compatible y es lo suficientemente cercano como para permitir que un políglota Matlab / Octave trivialice el desafío.