介绍
这里的大多数代码高尔夫球手在其提交的内容中添加了解释,因此更容易理解正在发生的事情。通常,代码行在左侧,相应的说明在右侧,带有某种分隔符。为了使外观漂亮,分隔符都在同一列上。同样,较长的说明文字通常也包含在下一行,因此读者不必水平滚动即可阅读所有内容。
但是,当您由于疯狂打高尔夫球而想要编辑此说明时,通常会花时间来重新整理您的说明。由于这是一项非常重复的任务,因此您需要为此编写一个程序。
挑战
给定几行带有说明的代码和一个分隔符,输出格式正确的带有说明的代码。
例
输入项
shM-crz1dc4。“ ANDBYOROF#z =输入 rz1#将输入转换为大写 cd#在空格处分割输入 c4。“ ANDBYOROF#从打包字符串中创建单词列表,该列表将被忽略 -#过滤掉那些词 HM#只取所有单词的首字母 s#将它们连接成一个字符串
输出量
shM-crz1dc4。“ ANDBYOROF#z =输入 rz1#将输入转换为大写 cd#在空格处分割输入 c4。“ ANDBYOROF#从打包字符串中创建单词列表,该字符串应为 #被忽略 -#过滤掉那些词 HM#只取所有单词的首字母 s#将它们连接成一个字符串
第一个可以找到该代码功能的cookie。
格式化算法
- 找到最长的代码行(不包括解释以及代码和分隔符之间的空格)。
- 在此代码行后添加5个空格,并在相应的分隔符后附加说明。现在这是参考线。
- 将每隔一行调整到该参考线,以使分隔符都在同一列中。
- 通过以下方式将所有超过93个字符的行换行:
- 找到最后一个单词,该单词的末尾位于第93列或更低的列。
- 将这之后的所有单词都包含在内,并用前导分隔符和正确的间距将其换行。这两个单词之间的空格必须删除,因此第一行以单词字符结尾,第二行以分隔符之后的一个字符开头。
- 如果结果行仍然超过93个字符,请再次执行相同操作,直到每行低于94个字符。
笔记
- 单词由非空格字符组成。单词由单个空格分隔。
- 自动换行始终是可能的。这意味着没有一个单词太长以至于不可能包装。
- 输入将仅包含可打印的ASCII,并且没有任何结尾的空格
- 分隔符每行只会出现一次。
- 尽管说明的长度可以是无限的,但分隔符和代码只能具有最大
93 - 5 = 87
字符长度的组合。5个字符是代码和分隔符之间的空格。代码和分隔符将始终至少一个字符长。 - 输入中可能包含空行。这些字符将永远不包含任何字符(如果将输入作为多行字符串,则换行符除外)。这些空行也必须出现在输出中。
- 每行都会有一些代码,分隔符和说明。空行例外。
- 您可以采用任何合理的格式输入,只要未经预处理即可。在您的答案中清楚说明您使用的是哪个。
- 输出可以是多行字符串或字符串列表。
规则
测试用例
这里的输入格式是代表行的字符串列表和分隔符的单个字符串。两者都用逗号分隔。输出是字符串列表。
['shM-crz1dc4。“ ANDBYOROF#z =输入','','rz1#将输入转换为大写','cd#在空格处分割输入','c4。” ANDBYOROF#从打包的单词中创建单词列表应该忽略的字符串','--#过滤掉这些单词','hM#只接受所有单词的首字母','s#将它们连成一个字符串'],“#”-> ['shM-crz1dc4 “ ANDBYOROF#z = input','','rz1#将输入转换为大写','cd#在空格处分割输入','c4。” ANDBYOROF#从打包字符串中创建单词列表,应为' ,'#已忽略','-#过滤掉这些单词','hM#只接受所有单词的第一个字母','#将它们连成一个字符串'] ['codecodecode e#Explanation','sdf dsf sdf e#A非常非常非常非常非常非常非常非常长很长很长很长很长很长很长很长很长的解释,并且它会越来越长','','一些更多编码和更多解释'],“ e#”-> ['codecodecode e#Explanation','sdf dsf sdf e#A非常非常非常非常非常非常非常非常非常长很长很长很长很长''''e#long很长很长很长很长的解释,并且它会越来越长','e#和更长','','一些更多的代码e#和一些更多的解释']
编码愉快!
length of the longest code-line + 5
。这也适用于仅包含说明的行,因为它们已被包装。