Python: Vorrei essere PHP [chiuso]


8

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

  1. Scrivi un programma in una lingua a tua scelta.
  2. 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
  3. 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.
  4. 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.
  5. Il risultato dovrebbe essere un programma in una lingua diversa, che, di per sé, segue le regole da 2 a 4.
  6. Le lingue utilizzate devono formare un ciclo infinito e ripetitivo.
    • Ad esempio, Python -> PHP -> C ++ -> Python -> PHP -> C ++ -> Python -> ...
  7. Il tuo punteggio è il periodo del ciclo. I legami vengono interrotti dalla lunghezza del codice iniziale più breve.
    • Nell'esempio sopra, il punteggio è tre.
  8. In ogni iterazione del ciclo, nessuna lingua può essere utilizzata più di una volta.
  9. 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.
  10. I programmi stessi non devono essere ripetuti.
    • Nell'esempio sopra, il primo e il quarto programma possono essere diversi.
  11. Qualsiasi versione di regex è accettabile, ma lo stesso deve essere usato per tutti i programmi.
  12. L'output totale per ciascun programma non può superare i 100 caratteri.
  13. 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.


Se stai usando la dimensione del codice come breaker, abbiamo davvero bisogno del limite di 100 caratteri?
Martin Ender,

@ MartinBüttner Sì; perchè no?
Ypnypn,

Certo, ma è un personaggio più lungo di \;;)
Martin Ender,

C ++ non è necessariamente compatibile con C.
giocatore di golf 9338

8
Penso che probabilmente vorrai richiedere che tutti i programmi nel ciclo siano diversi. Se sbaglio, per favore, affermalo - e rivendico la priorità sulla soluzione ovvia.
Peter Taylor,

Risposte:


6

2 lingue: Python, Ruby; 33 29 byte

Ecco un altro modo di fare Python e Ruby, che è un po 'più corto di quello della sfida:

Python:   print'^;puts"^.*?\\42#\\73"#'
prints:   ^;puts"^.*?\42#\73"#

Ruby:     puts"^.*?\42#\73"#print'^;puts"^.*?\\42#\\73"#'
prints:   ^.*?"#;

Non dovrebbe essere troppo difficile aggiungere PHP nel mix.


1

2 lingue: Python 2 e Befunge-93, 77 byte

Dopo aver letto attentamente le regole questa volta , ho trovato una vera risposta. Non vincerà alcun premio, ma Befunge è semplicemente troppo divertente da programmare.

u=u">>>>>:#,_@;Z;print;>>>>>:#,_@;Z(?=;Z);print;<v;Y;u;<v;Y(?=;Y);u"
print u

Questo programma Python genera:

>>>>>:#,_@;Z;print;>>>>>:#,_@;Z(?=;Z);print;<v;Y;u;<v;Y(?=;Y);u

Che produce queste sostituzioni:

FIND         REPLACE
>>>>>:#,_@   Z
print        >>>>>:#,_@
Z(?=;Z)      print
<v           Y
u            <v
Y(?=;Y)      u

Il che trasforma il programma in questo programma Befunge:

<v=<v"print;Z;>>>>>:#,_@;print;Z(?=;Z);>>>>>:#,_@;u;Y;<v;u;Y(?=;Y);<v"
>>>>>:#,_@ <v

Forse vedrò se riesco a fare una riga. Francamente, sono un po 'sorpreso che Befunge lavori per questo tipo di problema.

(Ci scusiamo per aver eliminato e cancellato un mucchio; mi sono fatto prendere dal panico per un secondo perché pensavo che il programma non avrebbe funzionato.)

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.