Pyth ist vielleicht die erfolgreichste Allzweck-Golfsprache. Obwohl es aufgrund neuer Sprachen etwas rückläufig ist, machte es von 2014 bis 2016 Pyths prägnante Syntax, ständige Aktualisierungen, Überladung und (für seine Ära) viele eingebaute Funktionen zu einem Favoriten für die meisten Fragen.
Pyth-Code ist oft schwer zu lesen. Sogar die Ausgabe des Debug-Modus (transpiliertes Python) besteht oft aus einer langen Zeile, manchmal mit zehn Klammern. Richtig formatiertes Pyth ist jedoch sehr gut lesbar.
Hier ist ein Teil des Pyth-Codes, der von @isaacg in Play the Word Chain geschrieben wurde .
.MlZfqhMtTeMPT+Lzs.pMyQ
So ist es viel besser lesbar.
.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
Für diese Herausforderung beseitigen wir den Aspekt der Kolmogorov-Komplexität bei der Kategorisierung von Pyth-Zeichen und konzentrieren uns auf die Formatierung. Anstatt Pyth-Code zu sein, besteht die Eingabe aus Zeichen in 0123456789M. Die Ziffer nstellt eine Funktion der Arität dar nund Mrepräsentiert einen Operator. Beispielsweise wird der obige Code als dargestellt 210221M101M102M011M10. Hier sind die Schritte, um die Minimierung aufzuheben:
Teilen Sie die Zeichenfolge in Token.
Ein Token stimmt überein [0-9]M*. 0Mwird nicht in der Eingabe auftreten.
Fügen Sie nachfolgende Nullen hinzu.
Wenn nicht genügend Argumente vorhanden sind, hängt Pyth so viele implizite Variablen (Lambda-Variablen oder Qs) an den Code an, wie erforderlich sind, um die Argumente des Programms zu füllen. diese sollten durch 0s dargestellt werden.
Gruppieren Sie Token in Zeilen.
Die Arität eines Tokens ist der Wert seiner Ziffer.
Ein arity-0-Token (dh eine 0) beendet eine Zeile.
Für ein Arity-1-Token sollte sich das nächste Token in derselben Zeile befinden, die durch ein Leerzeichen getrennt ist.
Bei einem arity> = 2-Token werden die Argumente in verschiedenen Zeilen in der Reihenfolge aufgeführt, in der sie im Code erscheinen, gefolgt von jeweils eigenen Unterargumenten und so weiter. Argumente zu einem Token werden bis zum Ende des Tokens plus ein Leerzeichen eingerückt.
Eingang
Eine nicht leere Zeichenfolge (oder ein Zeichenfeld, ein Feld mit Zeichenfolgen der Länge 1 usw., wie es nach den Standard-E / A-Methoden zulässig ist), bestehend aus einer Zeichenfolge, die die Teilzeichenfolge 0123456789Mnicht enthält 0M.
Ausgabe
Die Zeichenfolge wurde gemäß den obigen Regeln formatiert.
Testfälle
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
210221M101M102M011M10wäre[2,1,0,2,2,1,'M',1,0,1,'M',1,0,2,'M',0,1,1,'M',1,0]
Ms einen anderen Datentyp als die ganzen Zahlen haben dürfen.
M?