Sua tarefa é escrever um programa que produz seu próprio código-fonte ao contrário. No entanto, quando o código reverso é executado, ele deve gerar o código fonte, voltado para a direção correta.
Exemplo
Diga que seu programa é abc
. Quando executado, deve sair cba
. cba
, quando executado, deve sair abc
.
Regras
Seu programa deve seguir todas as regras de um quine adequado (exceto para a saída do código fonte). Palíndromos não são permitidos.
Nota aleatória: Estou ciente disso, mas acredito que esse desafio seja diferente porque o código transformado deve ter as mesmas propriedades.
Respostas:
RProgN , 3 bytes
Obrigado a @MartinEnder por me lembrar sobre esta resposta .
Experimente online!
Como funciona
Isso explora uma falha potencial em nossa definição de quine apropriado :
Obviamente, esse é o caso aqui, pois a saída é o inverso do código e o código não é um palíndromo.
RProgN - notação reversa do programador - usa uma pilha LIFO e imprime os itens na ordem em que são exibidos. Os dois tokens 1 e 2 , separados por espaços e / ou novas linhas, são exibidos na ordem inversa e são impressos separados por uma nova linha.
Isso imprime o programa invertido
que, por sua vez, imprime o original.
! enilno ti yrT
fonte
1\n1
, na qual os dois1
s codificar um ao outro, que é possivelmente um quine adequada, mas não uma adequada reversa-quine.)Befunge-98 , 33 bytes
Experimente online!
fonte
#
para fazer você cabeçalho. Também vá para Tryitonline.net e obtenha um intérprete on-lineg
não era permitido em quines Befunge, pois lê a fonte do programa diretamente da memória?Fissão 2 , 10 bytes
Experimente online!
Isso imprime:
Experimente online!
E vice versa.
Explicação
Esta é uma modificação do quine reverso . Aqui está trabalhando a nosso favor que
!
é usado para impressão e também está a apenas um ponto de código da cotação"
. Isso facilita a palindromia da seção de impressão de cotações (a'!+!'
). Vamos começar com o primeiro código:Este programa possui dois pontos de entrada no
L
s, cada um criando um átomo de esquerda. No entanto, o caminho certo atinge imediatamente o;
que o destrói. O da esquerda entra no modo de sequência e passa para o final, para que imprima o código inteiro (exceto o"
) de trás para a frente. Isso já nos dá_'!+!'L;L
. Tudo o que resta é imprimir o"
._
pode ser ignorado,'!
define a massa do átomo como 33 (o ponto de código de!
),+
incrementa-a"
e!
imprime-a. Isso é todo o resultado feito. Os'L
sets a átomos de massa para o ponto de código deL
mas isso é irrelevante.;
destrói esse átomo também e, como não restam átomos, o programa termina.Agora, o contrário:
Novamente, temos dois pontos de entrada, mas um átomo é imediatamente destruído. Desta vez, percorremos a
!+!'
seção primeiro, e começamos imprimindo uma cotação. O'_
é novamente irrelevante, mas precisamos do_
(ou de algum outro personagem inútil) aqui para evitar'
escapar do"
. O átomo chega ao final, percorre o código-fonte uma vez no modo string para imprimir o restante do programa em sentido inverso,L
então é ignorado e;
destrói o átomo e finaliza o programa.fonte