Quine poliglotta avanti e indietro!


9

È necessario creare un poliglotta che emetta il suo codice sorgente in una lingua e il suo codice sorgente all'indietro in un'altra. A differenza delle normali regole, ti è permesso leggere il file corrente o usare un built-in per ottenere il codice sorgente del tuo invio e invertirlo in una lingua. Il tuo codice sorgente non può essere un palindromo.

Ad esempio, se il codice sorgente è abcxyz, deve essere prodotto abcxyzin una lingua e zyxcbain un'altra. Se il tuo codice è abcxyzyxbca, non è valido perché è un palindromo.

In bocca al lupo!


3
Le regole normali sono lì per un motivo. Consentire i quine built-in renderà probabilmente questa sfida troppo ampia, e consentire i codici sorgente di palindrome consente risposte che sono in avanti quine per entrambe le lingue.
Erik the Outgolfer,

I palindromi @EriktheOutgolfer ora non sono ammessi.
programmatore

1
@EriktheOutgolfer Ah, quindi il codice sorgente non può essere un palindromo?
Luis Mendo,

2
Penso che dovresti offrire una taglia alla prima persona per completare questa sfida senza infrangere nessuna delle normali regole di quine. (forse 50 rep?)
clismique

1
Ho letto "in una lingua" come chiaramente vietando il caso in cui entrambe le lingue leggono il codice sorgente, ma l'attuale risposta più votata fa esattamente questo. Puoi modificare per chiarire se ciò è autorizzato?
hvd,

Risposte:



6

Python 2 / Python 3, 71 byte

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

Non utilizza alcun builtin quine.

Grazie agli ovs per avermi generalmente risvegliato.


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

@ovs Oh, certo, non ci ho pensato.
Erik the Outgolfer

6

Lotto / bash + tac, 39 byte

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

Uscita avanti in batch. Spiegazione: Batch vede la prima riga come un'etichetta e la ignora, mentre la seconda riga copia semplicemente il file sorgente su STDOUT. (Si noti che è necessario richiamare il file inclusa l'estensione o passare %0a %~f0.) bashVede quattro comandi:

  • :non fa nulla (uguale a true)
  • tac -r -s '.\|'$'\n' $0
    • -rmette tacin modalità regex
    • -s specifica una regex
    • '.\|'$'\n' è la regex, composta da
      • . qualsiasi personaggio tranne newline
      • \| o
      • $'\n' una nuova riga
    • Il risultato è che tacdivide il file in caratteri anziché in righe.
  • exit arresta lo script, ignorando il quarto comando
  • @type %0 (Ignorato)

Penso che puoi sostituire la prima riga con :;rev $0|tac;exit. Inoltre, l'intestazione dovrebbe invece indicare Batch / sh + util-linux + coreutils .
Erik the Outgolfer

@EriktheOutgolfer $'\n'è un bashismo, rev $0|tacnon inverte correttamente le nuove righe e importa davvero che tacsia contenuto in un pacchetto?
Neil,

$'\n'non esiste nella sostituzione che ho suggerito e rev $0|tacfunziona per me. E penso che sia meglio specificare i pacchetti anziché le singole utility, perché a volte potrebbe sorgere confusione (ad esempio quale pacchetto è tac?).
Erik the Outgolfer

@EriktheOutgolfer Provalo online! è sbagliato. Quindi è Provalo online! (ma più sottilmente).
Neil,

Potresti per favore dare una spiegazione?
programmatore

3

PHP e Retina, 2 byte

1

Lo stesso della risposta PHP e GolfScript di Gille.

PHP legge semplicemente il codice e lo emette direttamente, Retina sostituirà le corrispondenze di una stringa vuota nell'input e lo sostituirà con 1 e lo produrrà con una nuova riga.


2

JS (ES5), JS (ES6), 94 byte

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

Non utilizza alcun quine incorporato. Utilizza semplicemente il fatto che le funzioni JS si adattano al loro codice. Probabilmente si può giocare a golf di più.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.