No meu tempo no PPCG, notei que os problemas de quine e poliglota são bastante populares. Além disso, as meta-soluções para problemas, ou seja, scripts que geram um programa que é a solução para um problema, tendem a receber muito feedback positivo da comunidade. Portanto, eu criei esse desafio, que implementa essas três idéias.
Sua tarefa, leitor e entusiasta do código-golfe , é criar o mais curto possível um script que possa ser executado nos dois idiomas A e B para gerar quines para A e B. Quando o programa for executado no idioma A, ele deverá gerar um programa que é um quine no idioma B, mas não no idioma A e vice-versa. Os idiomas A e B podem ter uma versão diferente do mesmo idioma, desde que você tenha em mente que os quines gerados devem funcionar apenas em uma das versões.
Lembre-se de que as brechas padrão devem ser consideradas fechadas e apenas quines apropriadas são permitidas.
Boa sorte, o menor número de personagens vence!
Respostas:
CJam 0.6.6 dev / GolfScript,
151412 bytesGraças a @ jimmy23013 por jogar fora 2 bytes!
Resto para ser atualizado.
Verificação
Como o envio envolve espaços em branco significativos, é melhor comparar os hexdumps.
CJam
CJam imprime
"`0$~"0$~
e um avanço de linha à direita.Experimente online!O programa gerado é impresso
"`0$~"0$~
com o avanço de linha à direita no GolfScript ( Experimente online! ), Mas sem o avanço de linha no CJam ( Experimente online! ).Como a metaquina funciona
Como funciona o quine
Ao contrário do GolfScript, o CJam não imprime um avanço de linha à direita, por padrão, portanto, não é um problema no CJam.
GolfScript
Impressões GolfScript
"`0$~"0$~
, sem deixar espaço em branco.Experimente online!O programa gerado é impresso
"`0$~"0$~
sem espaços em branco no CJam ( Experimente online! ), Mas o GolfScript acrescenta um avanço de linha ( Experimente online! ).Como a metaquina funciona
Como funciona o quine
Ao contrário do CJam, o GolfScript anexa um avanço de linha ao conteúdo da pilha, portanto, isso não é uma questão no GolfScript.
fonte
"0$p"0$~a:n;
.a:n
, mas o usop
não me ocorreu.CJam / Fissão, 22 bytes
Experimente no CJam. Experimente em Fissão.
No CJam, isso imprime o padrão de fissão quine :
Experimente o fission quine.
Em Fission, isso imprime uma
"
variante -less do padrão CJam quine:Experimente o CJam quine.
Isso também funciona para 22 bytes (imprimindo os mesmos limites):
Explicação
No CJam:
Portanto, no final do programa, a pilha contém a sequência
"'!+OR"
e o caractere"
, ambos impressos implicitamente.Em Fissão, o fluxo do programa começa no
R
átomo certo.'"
apenas altera a massa de átomos)
,5
e-
são ignorados por vários motivos. Em seguida, o átomo entra no modo de impressão no"
e imprime{'_'~}_~
.;
destrói o átomo e finaliza o programa.fonte
{'_'~}
Clojure / Common Lisp, 274 bytes
Alguns espaços adicionados para facilitar a leitura
Define basicamente uma macro que retorna um quine no Clojure. Clojure requer parâmetros para definição de macro fornecidos como vetor (
[]
) enquanto Common Lisp (felizmente) simplesmente o ignora. Depois disso, diferimos 2 idiomas, avaliando'()
qual é igual anil
e, portanto, falsey no Common Lisp etrue
no Clojure. Em seguida, fazemos manipulações de strings usando o Clojure, que o Common Lisp nem tenta avaliar como ocorre em outroif
ramo. O Clojure, por outro lado, tenta verificar se outro ramo está pelo menos correto antes de executar, por isso teve que usareval
-lo para estar correto no Clojure e gerar a string correta no Common Lisp.Nota: o retorno de duas strings diferentes provavelmente pode ser mais curto, mas não será diferente dos desafios poliglotas sobre a saída de strings diferentes em idiomas diferentes. ¯ \ _ (ツ) _ / ¯
Execução da fonte original do Clojure: https://ideone.com/SiQhPf
Execução da fonte original comum do Lisp: https://ideone.com/huLcty
Saída de Clojure:
((LAMBDA (S) (PRINT (LIST S (LIST 'QUOTE S)))) '(LAMBDA (S) (PRINT (LIST S (LIST 'QUOTE S)))))
Saída Lisp comum:
((fn [s] (print (list s (list (quote quote) s)))) (quote (fn [s] (print (list s (list (quote quote) s))))))
Saída de Clojure executada no Common Lisp: https://ideone.com/T1DF7H
Vice-versa: https://ideone.com/Fezayq
fonte
Jelly / GolfScript,
1816 bytesVerificação
O teste de todos os programas envolvidos com o fluxo exato de bytes só pode ser feito localmente.
Geléia
Com a página de código de Jelly , o programa tem a seguinte aparência.
Isso imprime ( Experimente online! )
que é um quine no GolfScript ( Experimente on-line! ), mas um erro do analisador no Jelly ( Experimente on-line! ).
GolfScript
No latim-1, o programa tem a seguinte aparência, com um caractere DEL não imprimível entre
}
eþ
.Isso imprime ( Experimente online! )
ou visualizado com a página de código de Jelly,
que é um quine no Jelly ( Experimente online! ), mas apenas imprime um avanço de linha no GolfScript ( Experimente online! ).
fonte
”ṘṘ
, assimØV
deveria ter sumido, certo?JavaScript / C 278 bytes
Em impressionantes 278 bytes:
OCine:
int main(){char*A="int main(){char*A=%c%s%c;printf(A,34,A,34);}";printf(A,34,A,34);}
A coluna JavaScript:
A='A=;B=String.fromCharCode(39);console.log(A.slice(0,2)+B+A+B+A.slice(2));';B=String.fromCharCode(39);console.log(A.slice(0,2)+B+A+B+A.slice(2));
fonte
Befunge / Fissão, 35 bytes
Experimente em Befunge | Experimente em Fissão
Em Befunge, produz a quina de fissão :
Em Fissão, produz o quine Befunge :
fonte
Python / Retina,
70656466 bytesEu usei a mesma estratégia que usei na poliglota Python / Retina anterior .
Experimente em Python | Experimente na Retina
#
é um comentário em Python, portanto, ele simplesmente imprime a retina em Python. Na Retina, o primeiro estágio (2 linhas) não faz nada, porque não#
será encontrado na entrada. O próximo estágio não substitui nada pela base do Python Quine. O terceiro estágio substitui cada ponto e vírgula pela#print _%
peça. O último estágio remove todos#
.Quine na Retina:
Quine em Python:
Os cordões utilizados podem ser vistos neste desafio . O retine quine é um erro no Python, e o python quine não possui saída no Retina.
fonte
Python 3 / Python 2, 62 bytes
Experimente no Python 2 , Python 3 .
Baseado no Python Quine aqui . O fator de distinção entre as duas versões é o que elas fazem
int(-1/2)
: no Python 2,/
é a divisão inteira (arredondamento para baixo), com o resultado de-1
; no Python 3,/
é a divisão de ponto flutuante (-0.5
), queint
trunca para0
.Construímos uma corda
_
em três partes.'_=%r;print(_%%_['
e'int(-1/2):])'
são sempre os mesmos. A parte interessante é'~'*-~int(-1/2)
:-~int(-1/2)
é0
e o til não é adicionado à string;-~int(-1/2)
é1
e o til é adicionado à string.Assim, o Python 2 gera a solução Python 3
e Python 3 produz a solução Python 2
Em cada versão, a expressão dentro é
[ :]
avaliada como0
, o que faz com que a fatia inclua a cadeia inteira, enquanto no idioma errado que ela avalia-1
, o que faz com que a fatia inclua apenas o último caractere, truncando a saída para que não seja uma solução completa.fonte
Brain-Flak , brainfuck
46174009 bytesExperimente online!
Experimente online!
A explicação está a caminho. Eu ainda estou jogando este
fonte