Levenchina ciclica


45

sfondo

Come la maggior parte dei clienti abituali di PPCG sapranno, un è un programma che emette il proprio codice sorgente quando eseguito; e la distanza di Levenshtein tra due stringhe è il numero minimo di inserzioni, eliminazioni e modifiche necessarie per cambiare una stringa nell'altra. In questa sfida, stiamo combinando i due concetti in una "levenquine": un programma che genera il proprio codice sorgente, ma con un'istanza di un carattere inserita, eliminata o sostituita con un carattere diverso. (In altre parole, la distanza di Levenshtein tra il programma e il suo output è 1.)

L'obiettivo

Scrivi un levenquine in modo tale che il suo output sia un levenquine, anche l'output di quel programma sia un levenquine e così via. Inoltre, a un certo punto, la sequenza di esecuzione ripetuta del programma, esecuzione dell'output, esecuzione dell'output dell'output, ecc. Deve infine tornare al programma originale.

C'è un'ulteriore limitazione che rende le cose molto più difficili: ci devono essere due programmi distinti da qualche parte all'interno di questo ciclo che non hanno caratteri in comune (in altre parole, non esiste un carattere che esiste in un programma ed esiste anche all'interno dell'altro programma). Il tuo programma dovrà quindi trasformarsi gradualmente in un set di caratteri diverso e viceversa.

Se stai usando un linguaggio di programmazione che ha inevitabile boilerplate richiesto in qualsiasi programma che produce output (ad es. Ha solo un modo per scrivere una printdichiarazione e nessun'altra forma utile di output), puoi considerare quel boilerplate come inesistente allo scopo di determinare quali caratteri hanno in comune due programmi. Tuttavia, è ancora necessario contare quella piastra di caldaia ai fini della determinazione della proprietà Levenquine del codice.

chiarimenti

  • Ciascuno dei "programmi" nel ciclo può essere un programma completo o una funzione. Non devono essere tutti uguali, ad esempio alcuni potrebbero essere programmi completi e alcuni potrebbero essere funzioni.
  • Non tutti i programmi nel ciclo devono utilizzare la stessa forma di output. Ad esempio, alcuni potrebbero essere emessi tramite output standard e altri potrebbero essere emessi tramite errore standard.
  • I tuoi programmi verranno eseguiti senza input (o in lingue che richiedono input per fare qualsiasi cosa, l'input più semplice possibile).
  • Si applicano le regole di quine appropriate ; sebbene una Levenquine non sia una vera quine, non puoi fare nulla che sia illegale quando scrivi una quine corretta. In particolare, il programma null non è mai un output valido da un Levenquine appropriato (e quindi non può far parte del tuo ciclo).
  • La restrizione di Levenquine viene misurata in termini di caratteri, piuttosto che di byte (ad es. êÈ un carattere anche quando la sorgente è codificata in UTF-8). La restrizione senza caratteri in comune viene misurata anche in termini di caratteri. La condizione di vittoria, tuttavia, conta in byte.

Condizione di vittoria

Si prega di inviare almeno i seguenti tre programmi dal ciclo: il programma più breve (misurato in byte); e due programmi del ciclo che non hanno caratteri in comune. È possibile che due di questi siano uguali, ed è anche possibile che tutti e tre siano distinti. Il punteggio si basa sulla lunghezza in byte del programma più breve, con il più breve migliore, rendendolo così una specie di competizione di .


Per le persone che possono vedere i post eliminati: il post Sandbox era qui .

Penso che sarebbe anche utile che le risposte includano la durata del ciclo.
mbomb007,

E se, diciamo, la lingua ha diverse funzioni per eseguire l'output, ma condividono tutti i caratteri a coppie?
Ørjan Johansen,

2
@ ØrjanJohansen: immagino che non sarei troppo contrario a sceglierne uno e restare fedele in quel caso. Tuttavia, è probabilmente non competitivo; Volevo che la regola fosse oggettiva, perché altrimenti le persone hanno la tendenza a cercare di colpirla con delle lacune, e se si tenta di rendere la regola troppo complessa, ci sono argomenti su ciò che significa.

Può essere un levenquine un po 'saggio? Come nella distanza dal codice sorgente originale è 1 byte spento?
Magic Octopus Urn,

Risposte:


34

Gol> <> , 252 167 byte

1>'r&ff9++r}}r&f*bc++1z.r}r6=z?Hzznr6rHr}r:ee+6+=z9*5c*+1z . }&z+5c*&H}rebe*b+ke++rHS6PWSb`S6P$$1W5/11b6W6EE/W6EE`S6P$$W61`S6P5W6$5_61P1WW_b_

Provalo online!

E il programma reciprocamente distinto ( verifica ):

0<CŽB‚‚UGGŽ™™ŽB‚F~GGM–JŽ™ŽRY–[d––ŠŽRŽdŽ™ŽVGRGY–UFQFGM–<J<™B–GQFBd™Ž~F~G‡GGŽd;oRl-7-7so~|;oRl@@-Ms7QKMM3-3-3~R-4sRaaK-3sRaa|;oRl@@sR43M|;oRlQ-sR43@Q{RMlMss3{~{"

Provalo online!

Questo è principalmente ispirato dalla mia risposta alla sfida Quines reciprocamente esclusivi , con i miei complimenti anche alla risposta Gol di Bubbler .

Ecco un programma di verifica che puoi eseguire. Sfortunatamente, scade il tempo, ma puoi guardare come una sezione di codice costruisce l'altra sezione e quindi puoi copiare l'ultima versione stampata e incollarla nell'input per continuare. Alla fine, raggiungerai il primo programma che hai inserito.

Spiegazione

Entrambe le sezioni di codice sono composte da due sezioni, la parte esecutiva effettiva e i dati che contengono l'altra sezione di codice. Entrambi funzionano praticamente in modo identico:

Dipendono da una bandiera (il primo carattere del codice, o 1o 0). Se il flag è impostato, inizieranno a costruire l'altra sezione di codice prendendo il 252 ° carattere verso il basso, aggiungendo / sottraendo 28da esso e aggiungendolo al codice.

Ad esempio, ecco le prime due iterazioni del codice dopo il primo programma sopra:

1>'r&ff9++r}}r&f*bc++1z.r}r6=z?Hzznr6rHr}r:ee+6+=z9*5c*+1z . }&z+5c*&H}rebe*b+ke++rHS6PWSb`S6P$$1W5/11b6W6EE/W6EE`S6P$$W61`S6P5W6$5_61P1WW_b_C

1>'r&ff9++r}}r&f*bc++1z.r}r6=z?Hzznr6rHr}r:ee+6+=z9*5c*+1z . }&z+5c*&H}rebe*b+ke++rHS6PWSb`S6P$$1W5/11b6W6EE/W6EE`S6P$$W61`S6P5W6$5_61P1WW_b_CŽ

Casualmente quando raggiunge la fine della sezione corrente, esso inverte il secondo carattere del codice ( <per >e ritorno) per scegliere l'altra sezione.

Qui ci sono entrambe le sezioni insieme, che stanno per passare dall'esecuzione della prima sezione all'esecuzione della seconda.

1>'r&ff9++r}}r&f*bc++1z.r}r6=z?Hzznr6rHr}r:ee+6+=z9*5c*+1z . }&z+5c*&H}rebe*b+ke++rHS6PWSb`S6P$$1W5/11b6W6EE/W6EE`S6P$$W61`S6P5W6$5_61P1WW_b_CŽB‚‚UGGŽ™™ŽB‚F~GGM–JŽ™ŽRY–[d––ŠŽRŽdŽ™ŽVGRGY–UFQFGM–<J<™B–GQFBd™Ž~F~G‡GGŽd;oRl-7-7so~|;oRl@@-Ms7QKMM3-3-3~R-4sRaaK-3sRaa|;oRl@@sR43M|;oRlQ-sR43@Q{RMlMss3{~{"

Provalo online!

I flag sono l'opposto di ogni sezione, quindi la nuova sezione in esecuzione inizierà a eliminare l'altra sezione del codice fino a raggiungere il proprio codice. A questo punto, lancia la bandiera e il ciclo si ripete di nuovo.

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.