我在SO上遇到了这个问题,并认为这将是一个不错的高尔夫挑战。所以这里是:
挑战:
编写一个程序,该程序读取一系列字符串,每行一个,并输出每个字符串具有相同字符的所有位置的列表。
输入和输出:
输入由一行或多行可打印的非空白ASCII字符组成,每行后跟一个换行符。您可以假定所有输入线都具有相同的长度。换行符不应被视为输入的一部分(即,您不应将其作为匹配字符输出)。
输入示例(从SO问题中偷偷偷走的):
abcdefg
avcddeg
acbdeeg
读取输入后,程序应打印每个匹配列的位置及其包含的字符。(如果您的程序可以尽早确定没有匹配的列,则可以但不必停止读取其他输入。)允许使用任何合理的输出格式;特别是,您可以对位置使用基于0或基于1的索引。
上述输入的示例输出(使用基于0的索引):
0: a
3: d
6: g
得分:
这是代码高尔夫,所以最短的答案会获胜。如果出现平局,则可能会授予部分平局决胜字符以提供其他功能:
- −½个字符,用于正确处理长度不等的输入行。(输出中不应包含最短输入行的末尾位置。)
- −¼个字符,用于正确处理由任意UTF-8编码的Unicode字符组成的输入。
为了获得启发,您可能会在SO问题上找到一些解决方案(见上文)。
说明:
简单地串联的位置和角色,如
0a3d6g
,并不能算作“合理的输出”。您应该在输出的每个元素之间提供某种分隔符(例如空格),以便可以对其进行明确的解析。输入将在标准输入流(
stdin
)上提供,或使用您选择的语言最自然的任何文本文件输入机制提供。(如果你选择的语言不具有对文件输入一个自然机制,尽一切似乎在精神上最接近的一次。)当没有更多数据要读取时(即发生文件结束条件时),输入结束。如果需要,可以要求输入以空行终止(显然,您不应将其视为输入的一部分)。如果这样做,请在回答中提及它,以便其他人可以提供正确的测试输入。
每行输入,包括最后一行,都以换行符结尾。您的答案不得将此换行符报告为匹配列。(如果您的解决方案还可以处理最后一行不以换行符结尾的输入,那是很好的,但这不是必需的。)