Programme multiple Quinecatenate!

22

Votre tâche consiste à donner trois langues différentes A, B, C et à écrire deux programmes différents P et Q tels que:

P est une quine en langage A, mais pas une quine en B ni C;

Q est une quine en langage B, mais pas une quine en A ni C; et

Q concaténé après P (sans ajout de nouveaux caractères entre les deux) est une quine en langage C, mais pas en B ni en A.

Il s'agit de codegolf, où votre score est la longueur de la quine finale concaténée. Encore une fois, respectez les règles de quines appropriées - pas de lecture de votre code source, pas de programmes vides, etc.

Faraz Masroor
la source
2
Règles sur les commentaires?
Addison Crump
C'est quelque chose auquel je n'avais pas pensé auparavant. Je suis enclin à les laisser glisser parce que vous devez vous soucier de l'imprimer ET de vous assurer que le langage C a la même syntaxe de commentaire ou quelque chose, mais je suis flexible.
Faraz Masroor
Est-ce que "pas de quine" signifie "faire quelque chose" ou "au moins courir"?
LegionMammal978
1
Lorsqu'il est placé dans un compilateur, il ne produit pas son code source. Il peut exécuter ou lancer une erreur ou ne pas compiler ou produire autre chose ou rien, mais tant qu'il ne génère pas son code source.
Faraz Masroor
Quine inspiration de défi, pour toute personne intéressée: "Imprimez tous ces programmes en <langue>, et ceux seulement, qui ne s'impriment pas eux-mêmes."
ETHproductions

Réponses:

11

Fission + CJam + GolfScript, 38 36 octets

Fission , 6 octets

'!+OR"

C'est l'une des quines de fission de Martin Büttner . Essayez-le en ligne!

CJam, 30 octets

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

Le dernier octet est un saut de ligne. Essayez-le en ligne!

GolfScript, 36 octets

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

Le dernier octet est un saut de ligne. Essayez-le en ligne!

Vérification

$ 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

Comment ça marche

Fission

  • R engendre un atome qui se déplace vers la droite, s'enroulant autour du bord.

  • "bascule le mode d'impression. Tout jusqu'au prochain "est imprimé.

  • '! définit l'atome au point de code «!».

  • +incrémente la masse de l'atome, la définissant au point de code de ".

  • O imprime le caractère dont le point de code est la masse de l'atome et détruit l'atome.

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
la source
J'ai trouvé un autre Dennis!
Faraz Masroor
8

Brainfuck auto-modif + GolfScript + CJam, 29 27 octets

Brainfuck auto-modifiable , 12 octets

 {<[<]>[.>]}

Notez l'espace de tête. Essayez-le en ligne!

GolfScript, 15 octets

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

Le dernier octet est un saut de ligne. Essayez-le en ligne! .

CJam, 27 octets

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

Notez l'espace de tête. Le dernier octet est un saut de ligne. Essayez-le en ligne!

Vérification

$ 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

Comment ça marche

Brainfuck auto-modifiable

SMBF commence par son code source à gauche du pointeur de données.

<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
la source
5

Tcl, CJAM, GolfScript, 60 + 26 = 86 112 octets

Pas bien joué au golf.

Tcl , 60 octets

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

Basé sur le quine sur cette page . Il a une nouvelle ligne de fin.

CJam, 26 octets

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

Il a une nouvelle ligne de fin.

GolfScript, 86 octets

{puts} [{join} {{} \{ \}\]} {{puts} [{join} {{} \{ \}\]} }]
{"' '@`+n@0"L~;"0$~"N}0$~
jimmy23013
la source
Comment cela marche-t-il? Je n'ai jamais entendu parler de tcl
Faraz Masroor
@FarazMasroor Les chaînes en Tcl peuvent être entourées d'accolades et les noms de commande sont également des chaînes. Et les éléments entre accolades sont considérés comme des blocs dans GolfScript, qui peuvent être imprimés tels quels. CJam est similaire à GolfScript mais suffisamment différent pour que le quine dans une langue ne fonctionne pas dans l'autre. Avec ces choix de langues, ce ne sont que des quines normales avec du code supplémentaire à produire dans le bon format, qui n'est pas encore joué.
jimmy23013
3

ShapeScript + CJam + GolfScript, 96 95 62 octets

ShapeScript , 16 octets

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

Il s'agit du quine ShapeScript standard . Essayez-le en ligne!

CJam, 46 octets

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

Le dernier octet est un saut de ligne. Essayez-le en ligne!

GolfScript, 62 octets

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

Le dernier octet est un saut de ligne. Essayez-le en ligne sur Web GolfScript .

Vérification

$ 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

Comment ça marche

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
la source
2
Je me suis retrouvé un Dennis sauvage!
Faraz Masroor