Pyth é talvez a linguagem de golfe de uso geral mais bem-sucedida. Embora esteja em declínio como resultado de idiomas mais recentes, de 2014 a 2016, a sintaxe concisa do Pyth, atualizações constantes, sobrecarga e (para a época) muitos componentes internos o tornaram o favorito para a maioria das perguntas.
O código Pyth geralmente é difícil de ler. Até a saída do modo de depuração (Python transpilado) geralmente consiste em uma linha longa, às vezes com parênteses aninhados com dez profundidade. No entanto, Pyth corretamente formatado é muito legível.
Aqui está um pedaço do código Pyth, escrito por @isaacg em Play the Word Chain .
.MlZfqhMtTeMPT+Lzs.pMyQ
É muito mais legível assim.
.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 esse desafio, eliminamos o aspecto da complexidade kolmogorov da categorização de caracteres Pyth e focamos na formatação. Em vez de ser um código Pyth, a entrada será composta por caracteres 0123456789M
. O dígito n
representa uma função da aridade n
e M
representa um operador. Por exemplo, o código acima é representado como 210221M101M102M011M10
. Aqui estão as etapas para desinstalar:
Separe a sequência em tokens.
Um token corresponde [0-9]M*
. 0M
não ocorrerá na entrada.
Adicione 0s à direita.
Quando não há argumentos suficientes, Pyth anexa ao código tantas variáveis implícitas (variáveis lambda ou Q
s) necessárias para preencher os argumentos do programa; estes devem ser representados por 0
s.
Agrupe tokens em linhas.
A aridade de um token é o valor do seu dígito.
Um token arity-0 (ou seja, um 0) termina uma linha.
Para um token arity-1, o próximo token deve seguir a mesma linha, separado por um espaço.
Para um token de arity> = 2, seus argumentos seguem em linhas separadas, na ordem em que aparecem no código, cada um seguido por seus próprios subargumentos e assim por diante. Os argumentos para um token são recuados até o final desse token mais um espaço.
Entrada
Uma cadeia não vazia (ou matriz de caracteres, matriz de cadeias de comprimento 1, etc. conforme permitido pelos Métodos de E / S padrão) consistindo em 0123456789M
, que não conterá a substring 0M
.
Resultado
A sequência formatada de acordo com as regras acima.
Casos de teste
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
seria[2,1,0,2,2,1,'M',1,0,1,'M',1,0,2,'M',0,1,1,'M',1,0]
M
s pudessem ter um tipo de dados diferente dos números inteiros.
M
?