Programma multiplo Quinecatenate!


22

Il tuo compito è fornire tre diverse lingue A, B, C e scrivere due diversi programmi P e Q in modo tale che:

P è un quine in lingua A, ma non un quine in B né C;

Q è un quine nella lingua B, ma non un quine in A né C; e

Q concatenato dopo P (senza nessun nuovo carattere aggiunto in mezzo) è un quine nel linguaggio C, ma non in B né in A.

Questo è codegolf, dove il tuo punteggio è la lunghezza della quinta finale concatenata. Ancora una volta, attenersi alle regole dei quines appropriati : nessuna lettura del codice sorgente, nessun programma vuoto ecc.


2
Regole sui commenti?
Addison Crump,

È qualcosa a cui non avevo pensato prima. Sono propenso a lasciarli scivolare perché poi devi preoccuparti di stamparlo E dovendo assicurarti che il linguaggio C abbia la stessa sintassi dei commenti o qualcosa del genere ma sono flessibile.
Faraz Masroor,

"Not a quine" significa "fare qualcosa" o "almeno correre"?
LegionMammal978,

1
Quando viene inserito in un compilatore, non genera il suo codice sorgente. Può eseguire o generare un errore o non compilare o generare qualcos'altro o nulla, ma purché non generi il suo codice sorgente.
Faraz Masroor,

Risposte:


11

Fissione + CJam + GolfScript, 38 36 byte

Fissione , 6 byte

'!+OR"

Questa è una delle quine di Fission di Martin Büttner . Provalo online!

CJam, 30 byte

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

L'ultimo byte è un avanzamento riga. Provalo online!

GolfScript, 36 byte

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

L'ultimo byte è un avanzamento riga. Provalo online!

Verifica

$ 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

Come funziona

scissione

  • R genera un atomo che si muove a destra, avvolgendosi sul bordo.

  • "attiva / disattiva la modalità di stampa. "Viene stampato tutto fino al prossimo .

  • '! imposta gli atomi sul punto di codice di '!'.

  • +incrementa la massa dell'atomo, impostandola sul punto di codice di ".

  • O stampa il personaggio il cui punto di codice è la massa dell'atomo e distrugge l'atomo.

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.

Ho trovato un altro Dennis!
Faraz Masroor,

8

Brainfuck auto-modificante + GolfScript + CJam, 29 27 byte

Brainfuck automodificante , 12 byte

 {<[<]>[.>]}

Nota lo spazio iniziale. Provalo online!

GolfScript, 15 byte

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

L'ultimo byte è un avanzamento riga. Provalo online! .

CJam, 27 byte

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

Nota lo spazio iniziale. L'ultimo byte è un avanzamento riga.Provalo online!

Verifica

$ 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

Come funziona

Brainfuck automodificante

SMBF inizia con il suo codice sorgente a sinistra del puntatore dati.

<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.

5

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

Non ho giocato bene a golf.

Tcl , 60 byte

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

Basato sul quine in questa pagina . Ha una nuova riga finale.

CJam, 26 byte

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

Ha una nuova riga finale.

GolfScript, 86 byte

{puts} [{join} {{} \{ \}\]} {{puts} [{join} {{} \{ \}\]} }]
{"' '@`+n@0"L~;"0$~"N}0$~

Come funziona? Non ho mai sentito parlare di tcl
Faraz Masroor il

@FarazMasroor Le stringhe in Tcl possono essere racchiuse tra parentesi graffe e anche i nomi dei comandi sono stringhe. E le cose tra parentesi graffe sono considerate blocchi in GolfScript, che possono essere stampati così come sono. CJam è simile a GolfScript ma abbastanza diverso da non far funzionare un quine in una lingua nell'altra. Con queste scelte di lingue, queste sono solo normali quine con un po 'di codice in più per l'output nel formato giusto, che non è ancora golfato.
jimmy23013,

3

ShapeScript + CJam + GolfScript, 96 95 62 byte

ShapeScript , 16 byte

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

Questa è la versione standard di ShapeScript . Provalo online!

CJam, 46 byte

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

L'ultimo byte è un avanzamento riga. Provalo online!

GolfScript, 62 byte

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

L'ultimo byte è un avanzamento riga. Provalo online su Web GolfScript .

Verifica

$ 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

Come funziona

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.

2
Mi sono trovato un Dennis selvaggio!
Faraz Masroor,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.