Mehrfachprogramm Quinecatenate!

22

Ihre Aufgabe ist es, drei verschiedene Sprachen A, B, C zu geben und zwei verschiedene Programme P und Q so zu schreiben, dass:

P ist ein Quine in Sprache A, aber kein Quine in B oder C;

Q ist ein Quine in Sprache B, aber kein Quine in A oder C; und

Q, das nach P verkettet ist (ohne dazwischen hinzugefügte neue Zeichen), ist ein Quine in Sprache C, aber weder in B noch in A.

Dies ist Codegolf, bei dem Ihre Punktzahl die Länge der letzten verketteten Quine ist. Halten Sie sich auch hier an die Regeln der richtigen Quines - kein Lesen Ihres Quellcodes, keine leeren Programme usw.

Faraz Masroor
quelle
2
Regeln für Kommentare?
Addison Crump
Das ist etwas, woran ich vorher nicht gedacht habe. Ich neige dazu, sie schieben zu lassen, weil man sich dann Gedanken darüber machen muss, ob man das ausdrucken UND sicherstellen muss, dass Sprache C die gleiche Kommentarsyntax hat oder so, aber ich bin flexibel.
Faraz Masroor
Bedeutet "kein Quine" "irgendetwas tun" oder "zumindest rennen"?
LegionMammal978
1
In einem Compiler wird der Quellcode nicht ausgegeben. Es kann einen Fehler ausführen oder auslösen oder etwas anderes oder nichts kompilieren oder ausgeben, aber solange es seinen Quellcode nicht ausgibt.
Faraz Masroor
Eine echte Herausforderung für alle Interessierten: "Drucken Sie alle Programme in <Sprache> und nur diejenigen, die sich selbst nicht drucken."
ETHproductions

Antworten:

11

Fission + CJam + GolfScript, 38 36 Bytes

Spaltung , 6 Bytes

'!+OR"

Dies ist eine von Martin Büttners Fission Quines . Probieren Sie es online!

CJam, 30 Bytes

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

Das letzte Byte ist ein Zeilenvorschub. Probieren Sie es online!

GolfScript, 36 Bytes

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

Das letzte Byte ist ein Zeilenvorschub. Probieren Sie es online!

Nachprüfung

$ 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

Wie es funktioniert

Fission

  • R erzeugt ein Atom, das sich nach rechts bewegt und sich am Rand herumwickelt.

  • "Schaltet den Druckmodus um. Alles bis zum nächsten "wird gedruckt.

  • '! Setzt die Atome auf den Codepunkt '!'.

  • +erhöht die Masse des Atoms und setzt sie auf den Codepunkt von ".

  • O druckt das Zeichen, dessen Codepunkt die Masse des Atoms ist und zerstört das Atom.

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
quelle
Hab noch einen Dennis gefunden!
Faraz Masroor
8

Selbstmodifizierender Brainfuck + GolfScript + CJam, 29 27 Bytes

Selbstmodifizierender Brainfuck , 12 Bytes

 {<[<]>[.>]}

Beachten Sie das führende Leerzeichen. Probieren Sie es online!

GolfScript, 15 Bytes

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

Das letzte Byte ist ein Zeilenvorschub. Probieren Sie es online! .

CJam, 27 Bytes

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

Beachten Sie das führende Leerzeichen. Das letzte Byte ist ein Zeilenvorschub. Probieren Sie es online!

Nachprüfung

$ 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

Wie es funktioniert

Selbstmodifizierender Brainfuck

SMBF beginnt mit seinem Quellcode links vom Datenzeiger.

<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
quelle
5

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

Nicht gut golfen.

Tcl , 60 Bytes

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

Basierend auf der Quine auf dieser Seite . Es hat einen nachgestellten Zeilenumbruch.

CJam, 26 Bytes

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

Es hat einen nachgestellten Zeilenumbruch.

GolfScript, 86 Bytes

{puts} [{join} {{} \{ \}\]} {{puts} [{join} {{} \{ \}\]} }]
{"' '@`+n@0"L~;"0$~"N}0$~
jimmy23013
quelle
Wie funktioniert das? Ich habe noch nie von tcl gehört
Faraz Masroor
@FarazMasroor Strings in Tcl können von geschweiften Klammern umgeben sein, und Befehlsnamen sind ebenfalls Strings. Und geschweifte Klammern gelten in GolfScript als Blöcke, die so gedruckt werden können, wie sie sind. CJam ähnelt GolfScript, ist jedoch so unterschiedlich, dass ein Quine in einer Sprache in der anderen nicht funktioniert. Bei dieser Auswahl an Sprachen handelt es sich nur um normale Quines mit zusätzlichem Code für die Ausgabe im richtigen Format, das noch nicht golfen hat.
Jimmy23013
3

ShapeScript + CJam + GolfScript, 96 95 62 Bytes

ShapeScript , 16 Byte

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

Dies ist das Standard-ShapeScript-Quine . Probieren Sie es online!

CJam, 46 Bytes

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

Das letzte Byte ist ein Zeilenvorschub. Probieren Sie es online!

GolfScript, 62 Bytes

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

Das letzte Byte ist ein Zeilenvorschub. Probieren Sie es online im Web GolfScript aus .

Nachprüfung

$ 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

Wie es funktioniert

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
quelle
2
Ich fand mich einen wilden Dennis!
Faraz Masroor