Hacia atrás y hacia adelante políglota quine


9

Debe hacer un políglota que muestre su código fuente en un idioma y su código fuente hacia atrás en otro. A diferencia de las reglas normales, puede leer el archivo actual o usar un archivo incorporado para obtener el código fuente de su envío y revertirlo en un idioma. Su código fuente no puede ser un palíndromo.

Por ejemplo, si su código fuente es abcxyz, debe salir abcxyzen un idioma y zyxcbaen otro. Si su código es abcxyzyxbca, no es válido porque es un palíndromo.

¡Buena suerte!


3
Las reglas normales están ahí por una razón. Permitir que las incorporaciones de quine probablemente hagan que este desafío sea demasiado amplio, y permitir códigos fuente de palíndromo permite respuestas que son quines hacia adelante para ambos idiomas.
Erik the Outgolfer

Los palíndromos @EriktheOutgolfer ahora no están permitidos.
programmer5000

1
@EriktheOutgolfer Ah, ¿entonces el código fuente no puede ser un palíndromo?
Luis Mendo

2
Creo que deberías ofrecer una recompensa por la primera persona que complete este desafío sin romper ninguna de las reglas normales de quine. (¿quizás 50 rep?)
clismique

1
Leí "en un idioma" porque claramente no permitía el caso en que ambos idiomas leían el código fuente, pero la respuesta actual más votada hace exactamente eso. ¿Puedes editar para dejar en claro si eso está permitido?
hvd

Respuestas:



6

Python 2 / Python 3, 71 bytes

lambda _='lambda _=%r:(_%%_)[::int(1-(1/2)*4)]':(_%_)[::int(1-(1/2)*4)]

No utiliza ninguna quine builtins.

Gracias a los ovs por despertarme en general.


lambda _='lambda _=%r:(_%%_)[::int(1-(1/2)*4)]':(_%_)[::int(1-(1/2)*4)]por 71 bytes
ovs

@ovs Oh, por supuesto, cómo no pensé en eso.
Erik the Outgolfer

6

Lote / bash + tac, 39 bytes

:;tac -r -s '.\|'$'\n' $0;exit
@type %0

Salidas hacia adelante en lote. Explicación: Batch ve la primera línea como una etiqueta y la ignora, mientras que la segunda línea simplemente copia el archivo fuente a STDOUT. (Tenga en cuenta que debe invocar el archivo, incluida la extensión, o cambiarlo %0a %~f0). bashVe cuatro comandos:

  • :no hace nada (igual que true)
  • tac -r -s '.\|'$'\n' $0
    • -rpone tacen modo regex
    • -s especifica una expresión regular
    • '.\|'$'\n' es la expresión regular, compuesta de
      • . cualquier personaje excepto nueva línea
      • \| o
      • $'\n' una nueva línea
    • El resultado es que tacdivide el archivo en caracteres en lugar de líneas.
  • exit detiene el script, ignorando el cuarto comando
  • @type %0 (ignorado)

Creo que puedes reemplazar la primera línea con :;rev $0|tac;exit. Además, el encabezado debería decir Batch / sh + util-linux + coreutils en su lugar.
Erik the Outgolfer

@EriktheOutgolfer $'\n'es un Bashismo, rev $0|tacno invierte las nuevas líneas correctamente, y ¿realmente importa que tacvenga en un paquete?
Neil

$'\n'no existe en el reemplazo que he sugerido, y rev $0|tacfunciona para mí. Y creo que es mejor especificar los paquetes en lugar de las utilidades individuales, porque a veces puede surgir confusión (por ejemplo, ¿qué paquete tac?).
Erik the Outgolfer

@EriktheOutgolfer ¡ Pruébelo en línea! Está Mal. Entonces, ¡ pruébalo en línea! (pero más sutilmente).
Neil

¿Podría por favor dar una explicación?
programmer5000

3

PHP y Retina, 2 bytes

1

Lo mismo que la respuesta PHP y GolfScript de Gille.

PHP solo lee el código y lo genera directamente, Retina reemplazará las coincidencias de una cadena vacía en la entrada y la reemplazará con 1, y generará una nueva línea.


2

JS (ES5), JS (ES6), 94 bytes

function f(){try{eval("x=(f+'f()').split``.reverse().join``")}catch(e){x=f+"f()"};return x}f()

No utiliza ningún componente incorporado. Solo usa el hecho de que las funciones JS se stringifican a su código. Probablemente se pueda jugar más al golf.


1

Si permite leer el código fuente, no es realmente una quine.

PHP y sh + util-linux, 6 bytes

rev $0

Estoy seguro de que los idiomas de golf habituales pueden hacerlo en 2 bytes.


De hecho pueden.
ATaco
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.