C'è una vecchia storia di uno scalpellatore che non è mai stato soddisfatto di quello che era. Avrebbe voluto diventare il sole, e così era. Bloccato dalle nuvole, voleva essere - e divenne - una nuvola. Quando soffiava il vento, desiderava essere il vento. Fermato dalla montagna, desiderava essere una montagna, e così divenne uno. Presto, tuttavia, venne hackerato da uno scalpellatore e desiderava essere uno scalpellatore.
Allo stesso modo, il tuo compito è scrivere un programma che non è mai soddisfatto della lingua in cui si trova. Il tuo programma deve produrre una serie di sostituzioni regex per trasformarlo in una lingua diversa. E così via.
Regole
- Scrivi un programma in una lingua a tua scelta.
- Il programma dovrebbe generare una serie di almeno due segmenti. Un segmento è un gruppo di testo, separati da punti e virgola. Tuttavia, se un punto e virgola è contenuto in una regex, in modo tale che la sua rottura comporti una sintassi non valida, non separa i segmenti. Vedi l'esempio
- Il primo segmento è un modello regex da trovare e il secondo segmento è il modello di sostituzione. Il terzo è un altro modello "trova", e il quarto è un modello "sostituisci", e così via.
- Applicare i pattern regex al programma. Sostituisci il motivo sul primo segmento con uno sul secondo; sostituire il terzo motivo con quello sul quarto e così via.
- Il risultato dovrebbe essere un programma in una lingua diversa, che, di per sé, segue le regole da 2 a 4.
- Le lingue utilizzate devono formare un ciclo infinito e ripetitivo.
- Ad esempio, Python -> PHP -> C ++ -> Python -> PHP -> C ++ -> Python -> ...
- Il tuo punteggio è il periodo del ciclo. I legami vengono interrotti dalla lunghezza del codice iniziale più breve.
- Nell'esempio sopra, il punteggio è tre.
- In ogni iterazione del ciclo, nessuna lingua può essere utilizzata più di una volta.
- Per le regole 5 e 7, le lingue compatibili (C e C ++) e le diverse versioni della stessa lingua (Python 2 e Python 3) sono considerate uguali.
- I programmi stessi non devono essere ripetuti.
- Nell'esempio sopra, il primo e il quarto programma possono essere diversi.
- Qualsiasi versione di regex è accettabile, ma lo stesso deve essere usato per tutti i programmi.
- L'output totale per ciascun programma non può superare i 100 caratteri.
- Ogni output deve contenere istruzioni per cambiare effettivamente il programma. Cioè, nessun programma consecutivo nel ciclo può essere uguale.
Esempio
Python -> Ruby -> Python -> ...
print "uts;Z;rint;uts;Z(?=;Z);rint"
Uscite:
uts;Z;rint;uts;Z(?=;Z);rint
I segmenti sono:
FIND ; REPLACE
uts ; Z
rint ; uts
Z(?=;Z ; rint (breaking the first segment in two would result in invalid syntax)
L'applicazione delle sostituzioni regex, in ordine, ci dà:
print "Z;Z;rint;Z;Z(?=;Z);rint" # replace each "uts" with "Z"
puts "Z;Z;uts;Z;Z(?=;Z);uts" # replace each "rint" with "uts"
puts "rint;Z;uts;rint;Z(?=;Z);uts" # replace each "Z" followed by ";Z" with "rint"
L'esecuzione dell'ultima riga ci dà le istruzioni per riportarlo in codice Python.
\;
;)