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!


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:



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.


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)

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.


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.


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.


Eles de fato podem.
Ataco
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.