Programa A emite o código do programa B quando executado, e B emite a fonte de A.
Requisitos:
- Apenas um idioma nos dois programas
- Os programas são diferentes. Um programa que sai em si não se qualifica.
- Ambos os programas não estão vazios ou têm pelo menos 1 byte de comprimento. Novas linhas à direita na origem e na saída são ignoradas
stdin está fechado.Não leia nada (portanto, você não pode ler a fonte e manipulá-la). A saída vai para stdout.
Edit: stdin está conectado a/dev/null
. Você pode solicitar que seja fechado se esclarecido.- Não use
random
funções.
Adicional:
- Dê explicações, se possível
Pontuação é o comprimento total . A linha nova à direita não conta se não afetar o programa.
Respostas:
CJam , 13 + 13 = 26 bytes
Experimente online!
Saídas
Explicação
Como
e\
é comutativo em seu segundo e terceiro operando, o outro programa faz exatamente o mesmo, trocandoZ
eY
retornando à sua ordem original.fonte
CJam ,
11 + 13 = 2411 + 12 = 23 bytesExperimente online!
Saídas:
A saída possui 13 bytes, mas:
Então, mudei o espaço para uma nova linha para aproveitar isso.
É baseado na menor quantidade adequada de CJam:
E
N^
é xor a sequência com uma nova linha, que adiciona uma nova linha se não houver uma nova linha e removê-la se houver, para uma sequência em que cada caractere seja único.Acho que vi esse quine na pergunta quine, mas não o encontrei.
fonte
RProgN 2 , 3 + 3 = 6 bytes
Primeiro programa:
Experimente online!
Segundo programa:
Experimente online!
-2 graças a Martin Ender .
fonte
C, 95 + 95 = 190 bytes
Obrigado a @immibis por salvar 16 * 2 bytes!
Experimente online!
Saídas:
Experimente online!
Quais saídas:
fonte
Javascript, 67 + 67 = 134 bytes
1º programa:
2º programa:
Isto é baseado na resposta de Herman Lauenstein ao Tri-interquino
Javascript (código-fonte de leituras inválidas),
75 + 75 = 15061 + 61 = 12258 + 58 = 11650 + 50 = 100 byteseconomizou 20 bytes graças a Tushar, 6 bytes graças a Craig Ayre e economizou 16 bytes graças a kamoroso94
1º programa:
2º programa:
Troca os 1s pelos 0s e vice-versa. Ambos fazem a mesma coisa, apenas produzindo resultados diferentes devido ao seu código-fonte.
fonte
f.toString()
=>(''+f)
,(0|1)
=>0|1
,(a,b)
=>a
resultando emf=()=>("f="+(''+f).replace(/0|1/g,a=>a==0?1:0)+";f()");f()
f=_=>
e remover parênteses do retorno de chamada substituir, como @Tushar sugeriu:a=>+!+a
"f="+(f+"")
com("f="+f)
por -3 bytes./0|1/g
e/1|0/g
por0
e1
respectivamente por -5 bytes.f=_=>alert(("f="+f).replace(0,a=>+!+a)+";f()");f()
.Python 2, 63 + 63 = 126 bytes
Experimente online
Primeiro programa:
saídas:
Segundo programa:
Saídas:
fonte
JavaScript ( JsShell ), 35 + 34 = 69 bytes
1:
2:
fonte
Mathematica, 43 + 44 = 87 bytes
e
fonte
-1
no final, não-1 1
.asmutils sh, 16 + 16 bytes, abusando da regra "stdin is closed".
Como o stdin está fechado e o sh abrirá seu script para o primeiro identificador disponível (em vez de movê-lo para um identificador de número alto, como os shells modernos), tr termina lendo uma cópia do script sem nunca ter aberto.
Essa interquina é capaz de carga útil, mas inserir uma carga útil é complicado.
Além disso, esta versão original abusa de algum bug maluco no kernel antigo que eu usei naqueles dias. (Eu não sei o que há com esse kernel - descobri mais tarde que ele também possui diferentes números maiores e menores para dispositivos.) Se você corrigir as alterações da ABI que se quebraram, o interquino ainda não funcionará. Eu esqueço se o asmutils sh tem exec ou não, mas se tiver, esta é uma versão moderna:
Isso abusa de um erro deliberado no asmutils dd; possui uma otimização de desempenho que chama llseek para skip, se puder, mas para salvar um byte, passa SEEK_SET em vez de SEEK_CUR. Isso resulta em lixo no stderr, mas no interquine no stdout. O Asmutils dd não tem uma opção para suprimir o spam stderr.
fonte
/dev/null
? Enfim, bom trabalho!#!/bin/sh
?Carga insuficiente , 32 + 32 = 64 bytes
Experimente online!
Experimente online!
fonte
Lisp comum, 58 caracteres
... ou 24 caracteres, se você não se importa em assumir que
*print-circle*
está globalmente definido comoT
:A representação impressa do código é lida como uma estrutura cíclica, onde
#1#
aponta para a célula de contras a seguir#1=
. Citamos programas para que não sejam executados. Como*print-circle*
é T, o REPL cuida de emitir essas variáveis do leitor durante a impressão; é isso que o código acima imprime e retorna:Quando avaliamos o código acima, ele imprime:
Se você deseja manter o valor padrão para
*print-circle*
, que é NIL em uma implementação em conformidade, será necessário religar a variável temporariamente:Dentro do corpo do LET, imprimimos as coisas como
*print-circle*
sendo T. Portanto, obtemos:Como você pode ver, o novo programa não é religado
*print-circle*
, mas como estamos usandowrite
, que é a função de baixo nível chamada porprint
, podemos passar argumentos adicionais, como:circle
. O código funciona como esperado:No entanto, você precisa executar os programas acima como um script, não dentro de um REPL, porque, embora você imprima coisas enquanto cuida de estruturas circulares, ambos
write
eprint
também retorna o valor que está sendo impresso; e em um REPL padrão, o valor também está sendo impresso, mas fora do contexto dinâmico em que*print-circle*
é T.fonte
> <> , 16 + 16 = 32 bytes
e
Experimente online!
Isso funciona usando um salto no programa; o primeiro salto de programas pulará o reverso da pilha (se invertida, seria uma solução). O segundo programa não pula o inverso, mas já foi revertido pelo fluxo do programa, cria o original.
Este código terminará em um erro.
fonte
RProgN 2 , 7 + 7 = 14 bytes
Eu queria tentar mostrar um melhor uso do RProgN, em vez de apenas abusar dos pedidos de impressão ...
e...
Explicado
Como isso imprime a pilha de cabeça para baixo, a nova constante é impressa primeiro e, em seguida, a versão com strings da função é impressa.
Experimente online!
fonte
LOGO , 65 + 66 = 131 bytes
e
fonte
Python 3, 74 + 74 = 148 bytes
e
eu também não entendofonte
> <> , 12 + 12 = 24 bytes
e
Experimente online!
Ambos os programas usam uma literal de seqüência de caracteres de empacotamento para adicionar o código à pilha e, em seguida, produzir o
'
comando através de métodos diferentes. Ao imprimir a pilha, ele empurra o código para trás, mas'
permanece na frente. Existem várias variações que produzem o'
;3d*
,d3*
,00g
,:c-
Quando emparelhado com3d*
e:9-
quando combinado com00g
.Uma solução muito semelhante para postar, no Befunge-98 por 13 * 2 bytes
fonte
Stax , 18 + 20 = 38 bytes
Execute e depure online!
Execute e depure online!
Explicação
Adicionado para completar. Porto da resposta CJam de @jimmy23013. Alterna as novas linhas usando o conjunto xor.
fonte
Javascript (ES6), 36 + 36 = 72 bytes
Programa 1:
Programa 2:
Esses programas funcionam clonando-se e substituindo
5
por4
e4
com5
fonte
Klein ,
2624 bytesExperimente online!
Explicação
Isso funciona da mesma forma que o meu Klein Quine , onde imprime a fonte de trás para frente, seguida por a
"
, a última se safou disso por ser palindrômica, então tudo o que precisamos fazer é torná-la não palindrômica sem danificar sua funcionalidade. Ao mudar<
e:
fomos capazes de fazer isso sem interferir com a funcionalidade.fonte
Pari / GP , 36 + 36 = 72 bytes
Experimente online!
Experimente online!
fonte