从本质上讲,成功提交高尔夫球规则的代码到处都是疯狂的符号。为了使提交的内容易于理解,许多代码高尔夫球手选择对代码进行解释。在他们的解释中,代码行变成了垂直分解图。
例如,如果这是我的代码:
1_'[3:~2@+]`
我可以创建的许多可能的图之一如下所示:
1           
 _'         
   [      ] 
   [3:    ] 
   [  ~   ] 
   [   2@ ] 
   [     +] 
           `
目标
在此挑战中,您将编写一个说明自动格式化工具,该工具采用一行代码并创建一个可轻松添加说明文字的图表。
为了使此挑战更为有用,用户将能够通过提供格式字符串来指定每行的内容。格式化字符串将是第二行,仅包含字母A-Za-z,与程序长度相同。字母表示在解释中应打印程序字符的顺序。
这是一个没有任何类似于括号的格式的I / O示例:
123423
AabcBC
1     
    2 
     3
 2    
  3   
   4  
括号
如果程序中有多个字符具有相同的优先级,则该字符集将充当单个代码块(如果它们构成一个组)或一组括号(如果它们之间包含其他字符)。一般规则很简单:
直到更高优先级的所有其他字符都已经出现在图表上方的行上,字符才会出现在图表的一行中。
优先级相同的字符始终打印在同一行上。如果某个字符出现在一行上,则所有其他优先级相同的字符都出现在该行上。
一组具有相同优先级的字符将继续出现在每一行上,直到其所包围的所有其他字符都至少出现过一次为止。这允许“类似托架”的构造。如果
bceab是优先级,则b字符将出现在第二行(它们是第二高的优先级),并将继续出现,直到所有cea字符都出现为止。如果优先级字符串为abcadeafga,则所有优先级字符串bcdefg都视为包含在其中,则所有4as将继续出现,直到出现为止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中替换为。