Período 2 Quine invertido


10

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:


9

RProgN , 3 bytes

1
2

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 :

Deve ser possível identificar uma seção do programa que codifique uma parte diferente do programa. ("Diferente" significa que as duas partes aparecem em posições diferentes.)

Além disso, um quine não deve acessar sua própria fonte, direta ou indiretamente.

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

2
1

que, por sua vez, imprime o original.

! enilno ti yrT


Eu gosto do URL.
Christopher

4
Deveríamos consertar isso ... Eu postaria uma nova resposta (com base nesse comentário ) na meta questão, mas provavelmente não receberia atenção suficiente para competir com as respostas existentes.
ETHproductions

2
@ETHproductions: Faça isso. Sinto que há vários problemas com nossa definição atual de quine adequada. (Indiscutivelmente, minha linguagem 7 é um estudo de casos extremos para uma minúcia adequada; além desse caso em particular, ele pode lidar com muitos outros.) FWIW, não tenho certeza se essa é uma reversão adequada até mesmo pelo nosso atual definição; o 1 e o 2 são claramente codificados por si mesmos; portanto, o único interesse potencial é o que está codificando a nova linha. (Isto é diferente de uma 1\n1, na qual os dois 1s codificar um ao outro, que é possivelmente um quine adequada, mas não uma adequada reversa-quine.)

9

Befunge-98 , 33 bytes

b3*>1#;-:0g,:#;_@_;#:,g0:-;#1>*b3

Experimente online!


Ótima primeira resposta. Mas use o #para fazer você cabeçalho. Também vá para Tryitonline.net e obtenha um intérprete on-line
Christopher

2
Vá também no botão Salvar e use o envio de codegolf.
Christopher

Eu editei na TIO, em primeiro lugar eu só esqueceu de adicionar o link, mas agora é adicionado e obrigado pela dica Header
iQuick 143

Observe que a opção "envio de codegolf" no TIO fornece um modelo inicial, incluindo o cabeçalho.
Ørjan Johansen

Eu pensei que gnão era permitido em quines Befunge, pois lê a fonte do programa diretamente da memória?

7

Fissão 2 , 10 bytes

"L;L'!+!'_

Experimente online!

Isso imprime:

_'!+!'L;L"

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:

"L;L'!+!'_

Este programa possui dois pontos de entrada no Ls, 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 'Lsets a átomos de massa para o ponto de código de Lmas isso é irrelevante. ;destrói esse átomo também e, como não restam átomos, o programa termina.

Agora, o contrário:

_'!+!'L;L"

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, Lentão é ignorado e ;destrói o átomo e finaliza o programa.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.