Programa múltiplo Quinecatenate!

22

Sua tarefa é fornecer três idiomas diferentes A, B, C e escrever dois programas diferentes P e Q, de modo que:

P é um quine na linguagem A, mas não um quine na B nem na C;

Q é um quine na linguagem B, mas não é um quine na A nem na C; e

Q concatenado após P (sem novos caracteres adicionados no meio) é um quine na linguagem C, mas não em B nem A.

Este é o codegolf, onde sua pontuação é a duração da solução concatenada final. Novamente, siga as regras de quines apropriadas - sem ler seu código-fonte, sem programas vazios etc.

Faraz Masroor
fonte
2
Regras sobre comentários?
Addison Crump #
Isso é algo que eu não pensava antes. Estou inclinado a deixá-los deslizar, porque então você precisa se preocupar em imprimi-lo E ter que garantir que o idioma C tenha a mesma sintaxe de comentário ou algo assim, mas sou flexível.
Faraz Masroor
"Not quine" significa "faça alguma coisa" ou "pelo menos corra"?
precisa
1
Quando colocado em um compilador, ele não gera seu código fonte. Ele pode executar ou gerar um erro ou não compilar ou gerar outra coisa ou nada, mas desde que não exiba seu código-fonte.
Faraz Masroor
Quine desafia a inspiração, para qualquer pessoa interessada: "Imprima todos os programas em <idioma> e somente aqueles que não são impressos".
ETHproductions

Respostas:

11

Fissão + CJam + GolfScript, 38 36 bytes

Fissão , 6 bytes

'!+OR"

Este é um dos quines de Fissão de Martin Büttner . Experimente online!

CJam, 30 bytes

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

O último byte é um avanço de linha. Experimente online!

GolfScript, 36 bytes

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

O último byte é um avanço de linha. Experimente online!

Verificação

$ 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

Como funciona

Fissão

  • R gera um átomo que se move para a direita, envolvendo-se na borda.

  • "alterna o modo de impressão. Tudo até o próximo "é impresso.

  • '! define o átomo no ponto de código de '!'.

  • +incrementa a massa do átomo, configurando-o no ponto de código de ".

  • O imprime o caractere cujo ponto de código é a massa do átomo e destrói o á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
fonte
Encontrei outro Dennis!
Faraz Masroor
8

Brainfuck + GolfScript + CJam com modificação automática, 29 27 bytes

Brainfuck auto-modificável , 12 bytes

 {<[<]>[.>]}

Observe o espaço à esquerda. Experimente online!

GolfScript, 15 bytes

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

O último byte é um avanço de linha. Experimente online! .

CJam, 27 bytes

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

Observe o espaço à esquerda. O último byte é um avanço de linha. Experimente online!

Verificação

$ 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

Como funciona

Brainfuck auto-modificável

O SMBF começa com seu código-fonte à esquerda do ponteiro de dados.

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

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

Não jogou bem.

Tcl , 60 bytes

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

Com base no quine nesta página . Tem uma nova linha à direita.

CJam, 26 bytes

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

Tem uma nova linha à direita.

GolfScript, 86 bytes

{puts} [{join} {{} \{ \}\]} {{puts} [{join} {{} \{ \}\]} }]
{"' '@`+n@0"L~;"0$~"N}0$~
jimmy23013
fonte
Como é que isso funciona? Eu nunca ouvi falar de tcl
Faraz Masroor
As strings do @FarazMasroor no Tcl podem ser cercadas por chaves, e os nomes de comandos também são strings. E as coisas entre chaves são consideradas blocos no GolfScript, que podem ser impressas como estão. O CJam é semelhante ao GolfScript, mas diferente o suficiente para fazer com que uma solução em um idioma não funcione no outro. Com essas opções de idiomas, são apenas quines normais, com algum código extra para a saída no formato certo, que ainda não está disponível.
precisa saber é o seguinte
3

ShapeScript + CJam + GolfScript, 96 95 62 bytes

ShapeScript , 16 bytes

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

Este é o quine padrão do ShapeScript . Experimente online!

CJam, 46 bytes

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

O último byte é um avanço de linha. Experimente online!

GolfScript, 62 bytes

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

O último byte é um avanço de linha. Experimente online no Web GolfScript .

Verificação

$ 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

Como 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
fonte
2
Eu me achei um Dennis selvagem!
Faraz Masroor