Pyth est peut-être le langage de golf polyvalent le plus réussi. Bien qu'il soit quelque peu en déclin en raison des nouveaux langages, de 2014 à 2016, la syntaxe concise de Pyth, les mises à jour constantes, la surcharge et (pour son époque) de nombreux modules intégrés en ont fait un favori pour la majorité des questions.
Le code Pyth est souvent difficile à lire. Même la sortie du mode de débogage (Python transpilé) consiste souvent en une longue ligne, parfois avec des parenthèses imbriquées à dix profondeurs. Cependant, Pyth correctement formaté est très lisible.
Voici un morceau de code Pyth, écrit par @isaacg dans Play the Word Chain .
.MlZfqhMtTeMPT+Lzs.pMyQ
C'est beaucoup plus lisible comme ça.
.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
Pour ce défi, nous éliminons l' aspect de complexité kolmogorov de la catégorisation des caractères Pyth et nous nous concentrons sur le formatage. Au lieu d'être du code Pyth, l'entrée sera composée de caractères 0123456789M
. Le chiffre n
représente une fonction de l'aritén
et M
représente un opérateur. Par exemple, le code ci-dessus est représenté par 210221M101M102M011M10
. Voici les étapes pour minimiser:
Séparez la chaîne en jetons.
Un jeton correspond [0-9]M*
.0M
ne se produira pas en entrée.
Ajoutez des 0 de fin.
Lorsqu'il n'y a pas assez d'arguments, Pyth ajoute autant de variables implicites (variables lambda ou Q
s) au code que nécessaire pour remplir les arguments du programme; ceux-ci devraient être représentés par l' 0
art.
Regroupez les jetons en lignes.
L'arité d'un jeton est la valeur de son chiffre.
Un jeton arity-0 (c'est-à-dire un 0) termine une ligne.
Pour un jeton arity-1, le jeton suivant doit aller sur la même ligne, séparé par un espace.
Pour un jeton arity> = 2, ses arguments vont sur des lignes distinctes, dans l'ordre où ils apparaissent dans le code, chacun suivi de ses propres sous-arguments, etc. Les arguments d'un jeton sont mis en retrait à la fin de ce jeton plus un espace.
Contribution
Une chaîne non vide (ou un tableau de caractères, un tableau de chaînes de longueur 1, etc., comme le permettent les méthodes d'E / S standard) 0123456789M
, qui ne contiendra pas la sous-chaîne0M
.
Production
La chaîne formatée selon les règles ci-dessus.
Cas de 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
210221M101M102M011M10
serait[2,1,0,2,2,1,'M',1,0,1,'M',1,0,2,'M',0,1,1,'M',1,0]
M
s pouvaient être un type de données différent des entiers.
M
?