Pyth es quizás el lenguaje de golf de propósito general más exitoso. Aunque está algo en declive como resultado de los idiomas más nuevos, de 2014 a 2016 la sintaxis concisa de Pyth, las actualizaciones constantes, la sobrecarga y (para su época) muchas incorporaciones lo convirtieron en el favorito para la mayoría de las preguntas.
El código Pyth es a menudo difícil de leer. Incluso la salida del modo de depuración (Python transpilado) a menudo consiste en una línea larga, a veces con paréntesis anidados de diez de profundidad. Sin embargo, Pyth formateado correctamente es muy legible.
Aquí hay un fragmento de código Pyth, escrito por @isaacg en Play the Word Chain .
.MlZfqhMtTeMPT+Lzs.pMyQ
Es mucho más legible como este.
.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
Para este desafío, eliminamos el aspecto de complejidad kolmogorov de categorizar los caracteres Pyth y centrarnos en el formateo. En lugar de ser código Pyth, la entrada consistirá en caracteres en 0123456789M
. El dígito n
representa una función de aridad n
y M
representa un operador. Por ejemplo, el código anterior se representa como 210221M101M102M011M10
. Estos son los pasos para desminificar:
Separa la cuerda en fichas.
Un token coincide [0-9]M*
. 0M
no ocurrirá en la entrada.
Añadir ceros finales.
Cuando no hay suficientes argumentos, Pyth agrega tantas variables implícitas (variables lambda o Q
s) al código como sean necesarias para completar los argumentos del programa; estos deben estar representados por 0
s.
Agrupe las fichas en líneas.
La aridad de una ficha es el valor de su dígito.
Un token arity-0 (es decir, un 0) termina una línea.
Para una ficha arity-1, la siguiente ficha debe ir en la misma línea, separada por un espacio.
Para un token arity> = 2, sus argumentos van en líneas separadas, en el orden en que aparecen en el código, cada uno seguido de sus propios subargumentos, etc. Los argumentos de una ficha están sangrados al final de esa ficha más un espacio.
Entrada
Una cadena no vacía (o matriz de caracteres, matriz de cadenas de longitud 1, etc. según lo permitido por los métodos de E / S estándar) que consta de 0123456789M
, que no contendrá la subcadena0M
.
Salida
La cadena formateada de acuerdo con las reglas anteriores.
Casos de prueba
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
sería[2,1,0,2,2,1,'M',1,0,1,'M',1,0,2,'M',0,1,1,'M',1,0]
M
se permite que los s sean un tipo de datos diferente de los enteros.
M
?