Conceito
Escreva um programa que produz código na sua linguagem de programação. Esse código, quando executado, deve gerar o programa original.
Regras
- Como esta é uma trapaça, você pode ler o código fonte original.
- O primeiro programa de saída deve estar no mesmo idioma que o programa original.
- Você não pode produzir uma solução regular. Os dois programas devem ser diferentes.
- Aplicam-se brechas padrão.
- Este é o código-golfe, por isso a resposta mais curta vence, mas não será selecionada.
Respostas:
Bash + coreutils, 11 bytes
Isso imprime
Experimente online!
Por sua vez, isso imprime
fonte
tr
comando é redirecionado para o$0
qual é o seu próprio código-fonte. Então é "barato".Caracóis, 0 bytes
O segundo programa é
O primeiro programa conta o número de correspondências do padrão vazio na entrada vazia (que realmente possui a área 0, mas o padrão é sempre executado pelo menos uma vez como um hack para permitir que os programas decidam o que desejam imprimir na entrada vazia). O segundo programa começa com um quantificador (como
{1}
no regex), que causa um erro de análise. Como o programa não analisa com êxito, STDOUT é a sequência vazia.fonte
7 , 2 bytes
7 usa um conjunto de caracteres de 3 bits, mas recebe a entrada compactada em bytes (e de acordo com a meta, os idiomas com conjuntos de caracteres de sub bytes são contados usando bytes para o arquivo no disco ). Aqui está um
xxd
despejo do programa:Ao fornecer esse arquivo para o 7 intérprete, ele produzirá o seguinte programa:
que, por sua vez, produzirá o programa original novamente.
Então, o que está acontecendo aqui? Não há leitura da fonte envolvida (na verdade, não acho que seja possível ler a fonte no 7), embora o programa esteja enganando de outra maneira; Diz-me o que pensas. Veja como o programa funciona. (Observe que cada comando 7 tem duas variantes, algumas das quais não têm nomes e não podem aparecer no programa original. Existem doze comandos no total, em seis pares. Estou usando negrito para comandos ativos, não-negrito para passivo comandos, e nos casos em que o comando ativo não tem nome, eu estou dando o mesmo nome que o comando passivo correspondente e confiando no negrito para distinguir.No caso em que ambos são nomeados, por exemplo,
7
qual é a variante ativa de1
, cada comando recebe seu próprio nome e o negrito é apenas o destaque da sintaxe.)Nesse ponto, o 7 intérprete vê que o topo da pilha contém comandos (
2
e3
) que não são representáveis; portanto, ele escapa do topo da pilha, produzindo723
(o que é). A primeira saída de comando seleciona o formato de saída; neste caso, é o formato 7, "formate a saída da mesma maneira que o programa". Portanto, os comandos são compactados em bytes. Então o programa continua:Neste ponto, não há nada além de elementos de pilha vazios na pilha, portanto o programa é encerrado. Nós produzimos
23
mais cedo. Se escaparmos237
(e precisarmos, porque ele contém comandos irrepresentáveis), obtemos7231
. Isso obtém a saída diretamente, produzindo a saída final do programa237231
(formatada da mesma maneira que o programa, ou seja, compactada em bytes). É isso4fa67f
. (Pode-se notar que isso1
foi totalmente inútil em termos de afetar a saída; a única razão para existir é fazer os dois programas diferentes.)A corrida
237231
ocorre quase exatamente da mesma maneira; a diferença é que o inútil1
é executado logo após a primeira impressão (e o elemento vazio é excluído implicitamente na segunda vez que o final do programa é atingido). Mais uma vez, as231
extremidades até a saída de si, as23
extremidades até a saída de si precedido por um7
, e nós temos231723
, o programa original.O observador pode observar que os dois programas, apesar de terem o mesmo comprimento no octal "nativo" do idioma, têm comprimentos diferentes no disco. Isso ocorre porque um programa 7 pode ser preenchido com um número arbitrário de 1 bits, e o formato compactado descarta o preenchimento à direita. Veja como a codificação acontece:
Em outras palavras, dois bytes,
4C
F4
são suficientes para representar o programa, então foi tudo o que usei.fonte
Python 3,
297279251243225218208180126111 bytesNão trapaça:
Isso imprime:
que, quando executado, imprime o programa original.
fonte
Lote, 14 bytes
Que quando executado como
cyclicquine.bat
saídasQue quando executado gera o arquivo em lotes original.
fonte
RProgN , 4 bytes.
A comunidade parece considerar esse tipo de coisa como uma trapaça , o que satisfaz os critérios.
Com uma nova linha à direita.
Isso imprime
Com uma nova linha à direita, que imprime o primeiro código.
RProgN imprime a pilha aparecendo, de cima para baixo.
Experimente online!
fonte
1\n1\n
no RProgN seria uma solução sem trapaças, porque cada um dos 1s imprime um ao outro (e só seria considerado trapaça se cada um fosse impresso). Tudo isso realmente implica é que, às vezes, é difícil definir trapaças em quines. (No entanto, esta resposta está correta ou outra maneira, porque a questão na verdade não requer a Quine para enganar, apenas permite isso.)1\n
tecnicamente é uma solução válida, pois1
não é uma constante, mas uma chamada para uma função que empurra1
para a pilha.Jolf, 6 bytes
Quando executado, isso gera:
Que por sua vez, produz
1q_a_q
.Experimente aqui!
Explicação
fonte
JavaScript (ES6),
696059 bytesSaídas:
-1 byte (@ETHProductions): use 0 no regex em vez de \ d
fonte
n=>1-n
vez den=>+!+n
.1
acabará sendo substituído pelo regex.Bash + Sed, 15 bytes
Mesma idéia que a resposta de Dennis .
fonte
Bash,
Cate Rev,1916 bytes-3 graças a @izabera
fonte
Bash
,Tac
e `Rev?rev $0 # 0$<space><space>ver
por algum motivo eu não posso colocar dois espaços em um comentáriotac
rev
-ed écat
.> <>, 16 bytes
Experimente aqui!
Saídas
Esta é uma modificação da fornecida aqui . Não tenho certeza se está trapaceando, ele lê o codebox e o exibe.
fonte