Pyth也许是最成功的通用高尔夫球语言。尽管由于更新的语言而有所下降,但从2014年到2016年,Pyth简洁的语法,不断的更新,重载以及(对于其时代而言)许多内置函数使它成为大多数问题的最爱。
Pyth代码通常很难阅读。甚至调试模式(已编译的Python)的输出通常也由一长行组成,有时会在括号内嵌套十个深处。但是,正确格式化的Pyth可读性强。
这是一段由@isaacg在Play the Word Chain中编写的Pyth代码。
.MlZfqhMtTeMPT+Lzs.pMyQ
这样更具可读性。
.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
对于此挑战,我们消除了对Pyth字符进行分类的kolmogorov-complexity方面,而专注于格式设置。输入将不是Pyth代码,而是由中的字符组成0123456789M
。该数字n
表示arity的功能n
,并且M
表示一个运算符。例如,上面的代码表示为210221M101M102M011M10
。以下是取消最小化的步骤:
将字符串分成令牌。
令牌匹配[0-9]M*
。0M
在输入中不会发生。
添加尾随0。
当参数不足时,Pyth Q
会在代码中追加必要的隐式变量(lambda变量或s),以填充程序的参数。这些应以0
s 表示。
将令牌分组为行。
令牌的Arity是其数字的值。
arity-0令牌(即0)结束一行。
对于arity-1令牌,下一个令牌应在同一行上,并用空格隔开。
对于Arity> = 2令牌,其参数以它们在代码中出现的顺序排在单独的行上,每个参数后跟自己的子参数,依此类推。令牌的参数缩进到该令牌的末尾加上一个空格。
输入值
由组成的非空字符串(或char数组,length-1字符串数组等,由标准I / O方法允许)0123456789M
,其中将不包含substring 0M
。
输出量
根据上述规则格式化的字符串。
测试用例
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
将是[2,1,0,2,2,1,'M',1,0,1,'M',1,0,2,'M',0,1,1,'M',1,0]
M
允许s是不同于整数的数据类型,则IMO将稍微改变一下挑战。
M
?之间使用不同的数据类型。