Quine / Error Quine Polyglot


14

Su tarea es simple: escriba un programa que se pueda ejecutar en dos idiomas. Debe ser una quine normal (imprime su propio código fuente) en el idioma 1, y debe ser una quine de error (genera un mensaje de error idéntico a su propio código fuente) en el idioma 2.

Este es el , por lo que gana el envío válido más corto (en bytes).

Reglas:

  • Los idiomas pueden ser arbitrariamente similares. Los superconjuntos / versiones similares / dialectos similares no están prohibidos.
  • ¡Las reglas de error quine son las mismas que las de Make a Error Quine! .


¿Se permiten dos dialectos diferentes de BASIC?
MD XF

@MDXF Si tienen exactamente el mismo comportamiento, excepto que se envía a STDERR, entonces no. De lo contrario, sí.
Esolanging Fruit

Entonces mi respuesta es válida, entonces.
MD XF

@MDXF es válido.
Esolanging Fruit

Respuestas:


2

Befunge-93 (FBBI) / C (tcc) , 93 + 62 = 155 bytes

^"
>#001p#"<>:#,_@#1-8*3:-1*57+55-1*79*57:-1:*77**278\-1:*57$p:1: error: declaration expected

¡Pruébelo en línea !: Befunge-93 , C

Gracias a randomdude999 por notar que el nombre de archivo requiere comillas coincidentes para funcionar.

Debe guardarse con el nombre del archivo ^"\n>#001p#"<>:#,_@#1-8*3:-1*57+55-1*79*57:-1:*77**278\-1:*57$p, donde \nhay una nueva línea. Debido a esto, el TIO para C no se ejecuta exactamente como se esperaba. Probado para trabajar en Lubuntu.

Explicación (C):

El programa no se compila y tcc muestra felizmente el nombre del archivo como parte de su mensaje de error. Hay varios errores de compilación que puede obtener, en función del comienzo del código. ^al principio nos da un declaration expected, que es corto y no contiene caracteres problemáticos como ". Por otro lado, los desarrolladores de gcc y clang son muy pesimistas y optaron por generar múltiples errores a la vez, lo que no es muy bueno, por lo que no estamos usando sus compiladores.

Explicación (Befunge-93):

Befunge es conveniente para quines porque su código también se puede utilizar como datos de caracteres, gracias al "comando, que alterna el modo de cadena. Al principio, realizamos algunas operaciones de pila inútiles, luego emitimos un p(comando de colocación) que coloca un carácter NUL en (0, 1). Luego reflejamos el puntero de instrucciones a la izquierda y comenzamos a leer todo como una cadena. Esto debe hacerse a la izquierda, debido a la naturaleza LIFO de la pila. Después de envolver y alcanzar al "personaje nuevamente, la cadena termina. Tenga en cuenta que el carácter NUL reemplazó el$carácter, creando un delimitador a mitad de camino a través de la cadena. Luego empujamos 3 números en la pila y saltamos sobre el NUL (porque desafortunadamente cuelga el intérprete cuando se ejecuta como una instrucción). La parte estática del mensaje de error debe ejecutarse aquí. La mayoría de sus caracteres son no-ops, pero el pcomando consume tres argumentos (de ahí por qué presionamos 3 números, de lo contrario, parte de la cadena se comería aquí), y los caracteres :& 1empujan un total de 4 valores a la pila, lo que contrarrestamos con una py una $instrucción (pop y descarte). Luego, se realiza algo de aritmética para empujar los códigos ASCII ^"\n>#001p#"y finalmente un bucle imprime todos los valores en la pila como caracteres hasta que encuentra un carácter NUL y termina.


Debe encontrar un sistema operativo que admita dicho nombre de archivo y enumerarlo. Sé que Windows no es compatible con eso.
mbomb007

@ mbomb007 Supuestamente, Linux generalmente aceptará cualquier carácter imprimible en un nombre de archivo, excepto /. No puedo probar eso yo mismo ahora.
negativo siete

1
¿Qué versión de tcc usaste? Estoy usando 0.9.27-3 directamente desde los repositorios de Arch, y el error que obtengo es <define>:1: error: missing terminating " character.
randomdude999

1
Muy bien, encontré la versión exacta de tcc utilizada en TIO, y recibí el mismo mensaje de error, pero solo si las comillas del nombre del archivo coinciden. Tener citas sin igual parece bastante necesario para que esta respuesta funcione. Aquí hay algo que puede ayudarlo: Linux también permite nuevas líneas en los nombres de archivo. Este es el resultado de tcc al agregar una nueva línea y una cita al final del nombre de archivo: (enlace largo) . Sin embargo, esto significa que necesitará encontrar una manera de imprimir la nueva línea y las cosas en la segunda línea.
randomdude999

@ randomdude999 Gracias. He actualizado la solución para dar cuenta de esto. Muy interesante, de hecho, que una cita sin igual causa tal problema ...
negativo siete

0

Applesoft BASIC / Commodore LCD BASIC , 13 bytes

?SYNTAX ERROR

En Apple] [emulador, presione la RESETtecla para ingresar al modo BÁSICO.
En el emulador Commodore LCD, presione RightArrowEnterpara ingresar a la aplicación BÁSICA.
En ambos, no escriba ?SYNTAX ERRORmayúsculas, ya que automáticamente se capitalizan.


2
el estado de no competencia está reservado para las presentaciones en idiomas que se realizaron después del desafío. Si no es válido según las reglas, elimínelo. Espere la confirmación de OP primero porque creo que esto debería ser válido (suponiendo que funcione).
HyperNeutrino

@HyperNeutrino Gracias, editado.
MD XF

1
Voy a tener que sospechar de este también, entonces. Esta pregunta es bastante más brutal de lo que parece ...
Ørjan Johansen

1
@ ØrjanJohansen Bueno, no estoy tan seguro de esto. Técnicamente, el Commore LCD no tenía flujo de bytes de error estándar, entonces, ¿es realmente un error quine?
MD XF

1
@ ØrjanJohansen esto ? Supongo que eso podría significar que es imposible saber si esto es válido o no. ¿Podríamos esperar la confirmación del OP?
MD XF
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.