Para trás e para frente polyglot quine!

9

Você deve criar um poliglota que emita seu código-fonte em um idioma e seu código-fonte para trás em outro. Diferentemente das regras normais, você tem permissão para ler o arquivo atual ou usar um built-in para obter o código-fonte do seu envio e reverter isso em um idioma. Seu código-fonte não pode ser um palíndromo.

Por exemplo, se o seu código-fonte for abcxyz, ele deve ser impresso abcxyzem um idioma e zyxcbaem outro. Se o seu código for abcxyzyxbcainválido, porque é um palíndromo.

Boa sorte!

programmer5000
fonte
3
Regras normais existem por um motivo. Permitir que os built-ins de quine provavelmente tornem esse desafio muito amplo, e permitir que os códigos-fonte do palíndromo permitam respostas que são avançadas para ambos os idiomas.
Erik o Outgolfer
Os palíndromos @EriktheOutgolfer agora não são permitidos.
programmer5000
11
@EriktheOutgolfer Ah, então o código fonte não pode ser um palíndromo?
Luis Mendo
2
Acho que você deve oferecer uma recompensa para a primeira pessoa concluir esse desafio sem violar nenhuma das regras normais do quine. (talvez 50 rep?)
clismique
11
Eu li "em um idioma" como claramente não permitindo o caso em que ambos os idiomas lêem o código-fonte, mas a resposta mais votada atualmente faz exatamente isso. Você pode editar para deixar claro se isso deve ser permitido?
Hv

Respostas:

5

PHP e GolfScript, 2 bytes

1 1

ou seja, uma nova linha e o dígito 1.

Este é um quine reverso no GolfScript , contribuído neste site por Justin . O PHP não acionou que seja uma linguagem de programação, portanto imprime sua entrada.

Gilles 'SO- parar de ser mau'
fonte
6

Python 2 / Python 3, 71 bytes

lambda _='lambda _=%r:(_%%_)[::int(1-(1/2)*4)]':(_%_)[::int(1-(1/2)*4)]

Não usa nenhum built-in quine.

Obrigado aos ovs por me despertarem em geral.

Erik, o Outgolfer
fonte
lambda _='lambda _=%r:(_%%_)[::int(1-(1/2)*4)]':(_%_)[::int(1-(1/2)*4)]para 71 bytes
ovs
@ovs Oh, claro, como eu não pensei nisso.
Erik o Outgolfer
6

Lote / bash + tac, 39 bytes

:;tac -r -s '.\|'$'\n' $0;exit
@type %0

Saídas para a frente em lote. Explicação: O lote vê a primeira linha como um rótulo e a ignora, enquanto a segunda linha simplesmente copia o arquivo de origem para STDOUT. (Observe que você precisa chamar o arquivo, incluindo a extensão ou alterar %0para %~f0.) bashVê quatro comandos:

  • :não faz nada (o mesmo que true)
  • tac -r -s '.\|'$'\n' $0
    • -rcoloca tacno modo regex
    • -s especifica uma regex
    • '.\|'$'\n' é o regex, composto por
      • . qualquer caractere, exceto nova linha
      • \| ou
      • $'\n' uma nova linha
    • O resultado é que tacdivide o arquivo em caracteres e não em linhas.
  • exit para o script, ignorando o quarto comando
  • @type %0 (ignorado)
Neil
fonte
Eu acho que você pode substituir a primeira linha com :;rev $0|tac;exit. Além disso, o cabeçalho deve dizer Batch / sh + util-linux + coreutils .
Erik o Outgolfer
@EriktheOutgolfer $'\n'é um Bashism, rev $0|tacnão inverte novas linhas corretamente e realmente importa o que tacvem em um pacote?
24517 Neil
$'\n'não existe na substituição que sugeri e rev $0|tacfunciona para mim. E acho que é melhor especificar os pacotes em vez dos utilitários individuais, porque às vezes pode surgir confusão (por exemplo, quais pacotes tac?).
Erik o Outgolfer
@EriktheOutgolfer Experimente online! está errado. Então, experimente online! (mas mais sutilmente).
Neil
Poderia dar uma explicação?
programmer5000
3

PHP e Retina, 2 bytes

1 1

O mesmo que a resposta PHP & GolfScript de Gille.

O PHP apenas lê o código e o produz diretamente, o Retina substitui as correspondências de uma string vazia na entrada e a substitui por 1, e a produz por uma nova linha.

Okx
fonte
2

JS (ES5), JS (ES6), 94 bytes

function f(){try{eval("x=(f+'f()').split``.reverse().join``")}catch(e){x=f+"f()"};return x}f()

Não usa nenhum built-in quine. Apenas usa o fato de que as funções JS restringem seu código. Provavelmente pode ser jogado mais.

programmer5000
fonte
1

Se você permitir a leitura do código fonte, não é realmente uma solução.

PHP & sh + util-linux, 6 bytes

rev $0

Tenho certeza de que os idiomas usuais de golfe podem fazê-lo em 2 bytes.

Gilles 'SO- parar de ser mau'
fonte
Eles de fato podem.
Ataco