Pyth è forse il linguaggio di golf per tutti gli usi di maggior successo. Sebbene sia in qualche modo in declino a causa di linguaggi più recenti, dal 2014 al 2016 la sintassi concisa di Pyth, gli aggiornamenti costanti, il sovraccarico e (per la sua era) molti builtin lo hanno reso uno dei preferiti per la maggior parte delle domande.
Il codice Pyth è spesso difficile da leggere. Anche l'output della modalità debug (Python traspilato) è spesso costituito da una linea lunga, a volte con parentesi nidificate a dieci profondità. Tuttavia, Pyth correttamente formattato è molto leggibile.
Ecco un pezzo di codice Pyth, scritto da @isaacg in Play the Word Chain .
.MlZfqhMtTeMPT+Lzs.pMyQ
È molto più leggibile in questo modo.
.M Filter by gives-maximal-value of
l Z lambda Z:length(Z) over
f filter by (lambda T:
q equal
hM t T head-map tail T
eM P T end-map Pop T)
+L Append z to each element in
z
s .pM y Q flattened permutations of each subset of Q
Per questa sfida, eliminiamo l' aspetto della complessità kolmogorov della categorizzazione dei caratteri Pyth e ci concentriamo sulla formattazione. Invece di essere codice Pyth, l'input sarà composto da caratteri in 0123456789M. La cifran rappresenta una funzione di arity ne Mrappresenta un operatore. Ad esempio, il codice sopra è rappresentato come 210221M101M102M011M10. Ecco i passaggi per annullare la minificazione:
Separare la stringa in token.
Un token corrisponde [0-9]M* . 0Mnon si verificherà in input.
Aggiungi 0 finali.
Quando non ci sono abbastanza argomenti, Pyth aggiunge Qal codice tutte le variabili implicite (variabili o s lambda ) necessarie per riempire gli argomenti del programma; questi dovrebbero essere rappresentati da0 s.
Raggruppa i token in linee.
L'arità di un token è il valore della sua cifra.
Un token arity-0 (ovvero uno 0) termina una linea.
Per un token arity-1 il token successivo dovrebbe andare sulla stessa linea, separato da uno spazio.
Per un token arity> = 2, i suoi argomenti vanno su righe separate, nell'ordine in cui compaiono nel codice, ciascuno seguito dai propri argomenti secondari e così via. Gli argomenti di un token sono rientrati alla fine di quel token più uno spazio.
Ingresso
Una stringa non vuota (o array di caratteri, array di stringhe di lunghezza 1, ecc. Come consentito dai metodi I / O standard) costituito da 0123456789M, che non conterrà la sottostringa 0M.
Produzione
La stringa formattata secondo le regole precedenti.
Casi test
210221M101M102M011M10
2
1 0
2
2
1M 1 0
1M 1 0
2M
0
1 1M 1 0
123M4M
1 2
3M
4M
0
0
0
0
0
0
0
2MM
2MM
0
0
11011100
1 1 0
1 1 1 0
0
9000000
9
0
0
0
0
0
0
0
0
0
210221M101M102M011M10sarebbe[2,1,0,2,2,1,'M',1,0,1,'M',1,0,2,'M',0,1,1,'M',1,0]
Ms potessero essere un tipo di dati diverso dagli interi.
M?