Cadenas cíclicas, programas ocultos

13

Escriba 3 programas que realicen la siguiente tarea:

Sean códigos fuente A, B, C de esos tres programas;

  • si A corre BC se produce como salida,
  • si B ejecuta CA se produce,
  • si C funciona, se produce AB;

entonces cada programa escribe una cadena (ciclada para cada programa) y se esconde de ella.

Limitaciones adicionales, pero esenciales:

  • las lagunas estándar están prohibidas;
  • cada programa debe tener al menos 1 byte de largo;
  • cada uno de los tres programas debe estar escrito en un idioma diferente;

Sería bueno que su presentación tuviera este formato:

Idioma A (tamaño de A) - Idioma B (tamaño de B) - Idioma C (tamaño de C) - Puntuación

A B C
<extra stuff>

El ganador es alguien que obtiene el puntaje mínimo, que es la suma de tamaños de tres programas.

Blex
fuente
Sería mejor tener el puntaje último (para encajar con el guión de la tabla de clasificación)
Leaky Nun
77
No recomendaría plazos.
Erik the Outgolfer
Cualquier requerimiento acerca A, By Csiendo diferentes cadenas? Por ejemplo, ¿pueden las tres cadenas ser iguales? Si el programa imprime una nueva línea después de la salida, ¿no podemos contar eso?
Luis Mendo
No se requiere A, B, Cser diferente. Las nuevas líneas se cuentan como parte de la salida, por lo que las nuevas líneas de la cadena forman parte del programa.
Blex

Respuestas:

3

Befunge-98 , Gol> <> y Wumpus 47 * 3 = 141 bytes

"r75*1-47*0.@o&r84#o&]=74#]=\`/KHj '!_@#,k.'g00

¡Pruébalo en Befunge! Pruébalo en> <>! ¡Pruébalo en Wumpus!

Así es, ¡es el mismo programa tres veces! Cuando se ejecuta en cualquiera de los idiomas anteriores, imprime el código fuente dos veces, que son los otros dos programas concatenados.

Cómo funciona:

Befunge code:
  "r                               j '!_@#,k.'g00

  "   Wrapping string literal over code
   r  Reflect the pointer
  "   Wrapping string literal
                                              g00   Fetch " from cell 0,0 
                                          ,k.'      Print 47 characters
                                       _@#          If the next character is 0, exit
                                      !             Otherwise, set it to 0
                                   j '              And jump back to the beginning


Gol><> code:
  "r75*1-47*0.                \`/KH

  "             Wrapping string literal
   r            Reverse stack
    75*1-       Push "
         47*0.  Jump to cell 28,0
                              \  Continue right
                               `/K   Duplicate the top 47 characters on the stack
                                  H  Halt and output stack contents

Wumpus code:
  "r75*1-47*0.@o&r84#o&]=74#]=\

  "r75*1-47*0.  Exact same function as the ><> code, but with a bouncing string literal
                              \  Reflect left
                            ]=   Push a copy of the " to the bottom of the stack
                         74#     Push 47
                       ]=        Push a copy of the 47 to the bottom of the stack
                     o&          Print the top 47 characters
                  84#            Push a '0' to make up for the missing 0 at the end
               o&r               Reverse the stack and print the top 47 characters
              @                  And terminate
Jo King
fuente
0

JScript, VBScript, lote de Windows, 345 bytes

a=new ActiveXObject("scripting.filesystemobject");b=a.opentextfile(".js");c=b.readline();d=b.readline();a.createtextfile(".bat").write("@echo "+d.substr(2)+">.vbs\n@echo '"+c+">>.vbs")
//set a=createobject("scripting.filesystemobject"):set b=a.opentextfile(".vbs"):c=b.readline:d=b.readline:a.createtextfile(".js").write(mid(d,2)+chr(10)+"//"+c)

Nombre el archivo .js, luego se crearán .vbs y luego .bat.

Peter Ferrie
fuente