Programa múltiple Quinecatenate!

22

Su tarea es dar tres idiomas diferentes A, B, C y escribir dos programas diferentes P y Q de manera que:

P es una quine en el lenguaje A, pero no una quine en B ni C;

Q es una quine en el lenguaje B, pero no una quine en A ni C; y

Q concatenado después de P (sin que se agreguen caracteres nuevos) es una quine en el lenguaje C, pero no en B ni A.

Este es codegolf, donde su puntaje es la longitud de la quine final concatenada. Nuevamente, adhiérase a las reglas de quines apropiadas : no leer su código fuente, no hay programas vacíos, etc.

Faraz Masroor
fuente
2
Reglas sobre comentarios?
Addison Crump
Eso es algo en lo que no había pensado antes. Me inclino a dejar que se deslicen porque entonces debes preocuparte por imprimir eso Y tener que asegurarte de que el lenguaje C tenga la misma sintaxis de comentarios o algo así, pero soy flexible.
Faraz Masroor
¿"No un quine" significa "hacer algo" o "al menos correr"?
LegionMammal978
1
Cuando se coloca en un compilador, no genera su código fuente. Puede ejecutar o generar un error o no compilar o generar algo más o nada, pero siempre que no genere su código fuente.
Faraz Masroor
Quine desafía la inspiración, para cualquier persona interesada: "Imprima todos esos programas en <language>, y solo aquellos que no se imprimen ellos mismos".
ETHproductions

Respuestas:

11

Fisión + CJam + GolfScript, 38 36 bytes

Fisión , 6 bytes.

'!+OR"

Esta es una de las quines de fisión de Martin Büttner . Pruébalo en línea!

CJam, 30 bytes

' {"''"@*" "+YX#<
\"0$~"N}0$~

El último byte es un salto de línea. Pruébalo en línea!

GolfScript, 36 bytes

'!+OR"' {"''"@*" "+YX#<
\"0$~"N}0$~

El último byte es un salto de línea. Pruébalo en línea!

Verificación

$ wc -c P Q
 6 P
30 Q
36 total
$ cat P Q > P+Q
$ 
$ Fission P 2>&- | diff -qs - P
Files - and P are identical
$ cjam P 2>&- | diff -qs - P
Files - and P differ
$ golfscript P 2>&- | diff -qs - P
Files - and P differ
$ 
$ cjam Q 2>&- | diff -qs - Q
Files - and Q are identical
$ golfscript Q 2>&- | diff -qs - Q
Files - and Q differ
$ Fission Q 2>&- | diff -qs - Q
Files - and Q differ
$ 
$ golfscript P+Q 2>&- | diff -qs - P+Q
Files - and P+Q are identical
$ Fission P+Q 2>&- | diff -qs - P+Q
Files - and P+Q differ
$ cjam P+Q 2>&- | diff -qs - P+Q
Files - and P+Q differ

Cómo funciona

Fisión

  • R genera un átomo que se mueve hacia la derecha, envolviendo el borde.

  • "alterna el modo de impresión. Todo hasta el próximo "está impreso.

  • '! establece los átomos en el punto de código de '!'.

  • +incrementa la masa del átomo y lo establece en el punto de código de ".

  • O imprime el carácter cuyo punto de código es la masa del átomo y destruye el átomo.

CJam

'       e# Push a space character.
{       e# Push the following code block:
  "''"  e# Push that string.
  @*    e# Separate its characters by spaces.
  " "+  e# Append one more space.
  YX#   e# Raise 2 to the first power. Pushes 2.
  <     e# Discard all but the first two characters of the string, i.e., "' ".
  \     e# Swap the string "' " with the code block in execution.
  "0$~" e# Push that string.
  N     e# Push a linefeed.
}       e#
0$~     e# Push a copy of the code block and execute it.

GolfScript

'!+OR"' # Push that string.
{       # Push the following code block:
  "''"  # Push that string.
  @*    # Join its characters, separating them by the first string.
  " "+  # Append a space.
  YX    # Undefined token. Does nothing.
  #<    # Comment.
  \     # Swap the string with the code block in execution.
  "0$~" # Push that string.
  N     # Undefined token. Does nothing.
}       #
0$~     # Push a copy of the code block and execute it.
Dennis
fuente
¡Encontré otro Dennis!
Faraz Masroor
8

Brainfuck auto modificable + GolfScript + CJam, 29 27 bytes

Brainfuck auto modificable , 12 bytes

 {<[<]>[.>]}

Tenga en cuenta el espacio inicial. Pruébalo en línea!

GolfScript, 15 bytes

{So"0$~"N]}0$~

El último byte es un salto de línea. Pruébalo en línea! .

CJam, 27 bytes

 {<[<]>[.>]}{So"0$~"N]}0$~

Tenga en cuenta el espacio inicial. El último byte es un salto de línea. Pruébalo en línea!

Verificación

$ wc -c P Q
12 P
15 Q
27 total
$ cat P Q > P+Q
$ 
$ timeout 10 smbf P | diff -sq - P
Files - and P are identical
$ golfscript P | diff -sq - P
Files - and P differ
$ cjam P | diff -sq - P
Files - and P differ
$ 
$ golfscript Q | diff -sq - Q
Files - and Q are identical
$ cjam Q | diff -sq - Q
Files - and Q differ
$ timeout 10 smbf Q | diff -sq - Q
Terminated
$ 
$ cjam P+Q | diff -sq - P+Q
Files - and P+Q are identical
$ golfscript P+Q | diff -sq - P+Q
Files - and P+Q differ
$ timeout 10 smbf P+Q | diff -sq - P+Q
Terminated

Cómo funciona

Brainfuck auto modificable

SMBF comienza con su código fuente a la izquierda del puntero de datos.

<space>        (ignored)
{              (ignored)
<              Move the data pointer left.
[<]            Move the data pointer left to the next null byte.
>              Move the data pointer right.
[.>]           Print and move the data pointer right until null byte.
}              (ignored)

GolfScript

{            # Push the following code block:
  So         # Undefined token. Does nothing.
  "0$~"      # Push that string.
  N          # Undefined token. Does nothing.
  ]          # Wrap the stack in a array. Does not affect output.
}            #
0$~          # Push a copy of the code block and execute it.


### CJam

{<[<]>[.>]} e# Push that code block.
{           e# Push the following code block:
  So        e# Print a space. Since it is printed explicitly,
            e# it will appear at the beginning of the output.
  "0$~"     e# Push that string.
  N         e# Push a linefeed.
  ]         e# Wrap the stack in a array. Does not affect output.
            e# This makes the program an infinite, empty  loop
            e# in SMBF; it would be a quine otherwise.
}           e#
0$~         e# Push a copy of the code block and execute it.
Dennis
fuente
5

Tcl, CJam, GolfScript, 60 + 26 = 86 112 bytes

No golf bien.

Tcl , 60 bytes

{puts} [{join} {{} \{ \}\]} {{puts} [{join} {{} \{ \}\]} }]

Basado en el quine de esta página . Tiene una nueva línea final.

CJam, 26 bytes

{"' '@`+n@0"L~;"0$~"N}0$~

Tiene una nueva línea final.

GolfScript, 86 bytes

{puts} [{join} {{} \{ \}\]} {{puts} [{join} {{} \{ \}\]} }]
{"' '@`+n@0"L~;"0$~"N}0$~
jimmy23013
fuente
¿Como funciona esto? Nunca he oído hablar de tcl
Faraz Masroor
Las cadenas @FarazMasroor en Tcl pueden estar rodeadas por llaves, y los nombres de los comandos también son cadenas. Y las cosas entre llaves se consideran bloques en GolfScript, que se pueden imprimir tal cual. CJam es similar a GolfScript pero lo suficientemente diferente como para hacer que una quine en un idioma no funcione en el otro. Con estas opciones de idiomas, estos son solo quines normales con algún código adicional para generar en el formato correcto, que aún no se ha jugado.
jimmy23013
3

ShapeScript + CJam + GolfScript, 96 95 62 bytes

ShapeScript , 16 bytes

'"%r"@%"0?!"'0?!

Esta es la línea estándar de ShapeScript . Pruébalo en línea!

CJam, 46 bytes

];{"'\"%r\"@%\"0?!\"'0?!];"SS#~(>
\"0$~"N}0$~

El último byte es un salto de línea. Pruébalo en línea!

GolfScript, 62 bytes

'"%r"@%"0?!"'0?!];{"'\"%r\"@%\"0?!\"'0?!];"SS#~(>
\"0$~"N}0$~

El último byte es un salto de línea. Pruébelo en línea en Web GolfScript .

Verificación

$ wc -c P Q
16 P
46 Q
62 total
$ cat P Q > P+Q
$ 
$ shapescript P 2>&- | diff -qs - P
Files - and P are identical
$ cjam P 2>&- | diff -qs - P
Files - and P differ
$ golfscript P 2>&- | diff -qs - P
Files - and P differ
$ 
$ cjam Q 2>&- | diff -qs - Q
Files - and Q are identical
$ golfscript Q 2>&- | diff -qs - Q
Files - and Q differ
$ shapescript Q 2>&- | diff -qs - Q
Files - and Q differ
$ 
$ golfscript P+Q 2>&- | diff -qs - P+Q
Files - and P+Q are identical
$ shapescript P+Q 2>&- | diff -qs - P+Q
Files - and P+Q differ
$ cjam P+Q 2>&- | diff -qs - P+Q
Files - and P+Q differ

Cómo funciona

ShapeScript

'       Push a string that, when evaluated, does the following.
  "%r"  Push this formatting string. %r gets replaced by a string
        representation of the corresponding argument.
  @     Swap the string that is being evaluated on top of the stack.
  %     Apply formatting to the string on top of the stack.
  "0?!" Push that string.
'
0?!     Push a copy of the previous string and evaluate it.

CJam

];      e# Clear the stack. Stack is already clear. Does nothing.
{       e# Push the following code block:

  "'\"%r\"@%\"0?!\"'0?!];"

  SS#   e# Find the index of " " in " ". Pushes 0.
  ~(    e# Apply logical NOT and decrement. Pushes -2.
  >     e# Discard all but the two rightmost characters from the string,
        e# i.e., reduce it to "];".
  \     e# Swap the string "];" with the code block in execution.
  "0$~" e# Push that string.
  N     e# Push a linefeed.
}       e#
0$~     e# Push a copy of the code block and execute it.

GolfScript

'"%r"@%"0?!"'

0?!     # Find the index of the number 0 in the string and apply logical NOT.
];      # Clear the stack.
{       # Push the following code block:

  "'\"%r\"@%\"0?!\"'0?!];"

  SS    # Undefined token. Does nothing.
  #~(>  # Comment.
  \     # Swap the string with the code block in execution.
  "0$~" # Push that string.
  N     # Undefined token. Does nothing.
}       #
0$~     # Push a copy of the code block and execute it.
Dennis
fuente
2
Me encontré un Dennis salvaje!
Faraz Masroor