从本质上讲,成功提交高尔夫球规则的代码到处都是疯狂的符号。为了使提交的内容易于理解,许多代码高尔夫球手选择对代码进行解释。在他们的解释中,代码行变成了垂直分解图。
例如,如果这是我的代码:
1_'[3:~2@+]`
我可以创建的许多可能的图之一如下所示:
1
_'
[ ]
[3: ]
[ ~ ]
[ 2@ ]
[ +]
`
目标
在此挑战中,您将编写一个说明自动格式化工具,该工具采用一行代码并创建一个可轻松添加说明文字的图表。
为了使此挑战更为有用,用户将能够通过提供格式字符串来指定每行的内容。格式化字符串将是第二行,仅包含字母A-Za-z
,与程序长度相同。字母表示在解释中应打印程序字符的顺序。
这是一个没有任何类似于括号的格式的I / O示例:
123423
AabcBC
1
2
3
2
3
4
括号
如果程序中有多个字符具有相同的优先级,则该字符集将充当单个代码块(如果它们构成一个组)或一组括号(如果它们之间包含其他字符)。一般规则很简单:
直到更高优先级的所有其他字符都已经出现在图表上方的行上,字符才会出现在图表的一行中。
优先级相同的字符始终打印在同一行上。如果某个字符出现在一行上,则所有其他优先级相同的字符都出现在该行上。
一组具有相同优先级的字符将继续出现在每一行上,直到其所包围的所有其他字符都至少出现过一次为止。这允许“类似托架”的构造。如果
bceab
是优先级,则b
字符将出现在第二行(它们是第二高的优先级),并将继续出现,直到所有cea
字符都出现为止。如果优先级字符串为abcadeafga
,则所有优先级字符串bcdefg
都视为包含在其中,则所有4a
s将继续出现,直到出现为止g
。
更多格式要求
输出的所有行应具有相同的长度(输入行的长度),并在必要时用空格填充。输入程序行可能包含空格,尽管这些空格也将被赋予优先级字母。输出/输入上的尾随换行符是可选的。
计分
这是代码高尔夫,最少的字节数获胜。
例子
这是一段带有复杂格式的代码的注释示例。
1_'[3:~2@+]`
abbcddeffgch
1 #highest priority is denoted by the lowercase letter a
_' #priority b
[ ] #all characters with priority c
[3: ] #priority d, but priority c still printed because it encloses more
[ ~ ] #priority e
[ 2@ ] #priority f
[ +] #priority g, last line of c because all enclosed characters have appeared
` #priority h
Perl中的一个示例:
$_=<>;s/[^aeiou\W]/$&o$&/gi;print
aaaaaabbccccccccccbdddddbbbbeeeee
$_=<>;
s/ / /gi;
s/[^aeiou\W]/ /gi;
s/ /$&o$&/gi;
print
以下是MartinBüttner提供的CJam中的一些示例:
l~2*{_2%{3*)}{2/}?_p_(}g;
aabbcdddefffeeggeehhiiccj
l~
2*
{ }g
{_2% }g
{ { }{ }? }g
{ {3*)}{ }? }g
{ { }{2/}? }g
{ _p }g
{ _(}g
;
q{_eu'[,66>"EIOU"-#)g{'o1$}*}/
abcccddddddeeeeeeefgghiijjhhbb
q
{ }/
{_eu }/
{ '[,66> }/
{ "EIOU"- }/
{ # }/
{ )g }/
{ { }*}/
{ {'o }*}/
{ { 1$}*}/
这是一个疯狂的例子,只是惹你生气:
1_'[3:~2@+]`
azTABACBDCAT
[ : ]
[3: 2 ]
[3:~2 +]
[ :~ @+]
' `
1
_
这是当括号重叠时会发生什么的更明确的示例abab
。(通常,这不是您选择格式化说明的方式。)
aabbccddaaeebb
aabbccddaaeebb
aa aa
aabb aa bb
aabbcc aa bb
aabb ddaa bb
bb eebb #"aa" no longer appears because all of "bbccdd" have already appeared.
oNo
可以n
在TIO中替换为。