【发布时间】:2011-01-11 15:50:27
【问题描述】:
挑战
通过用范围替换连续运行来压缩一长串数字。
示例
输入
1, 2, 3, 4, 7, 8, 10, 12, 13, 14, 15
输入保证是升序的,不会包含重复的。
输出
1 - 4, 7, 8, 10, 12 - 15
请注意,两个数字的范围应保持原样。 (7, 8;不是7 - 8)
规则
您可以从命令行或标准输入中接受整数(或等效数据类型)的排序列表作为方法参数。(选择导致更短代码的任何选项)
您可以通过打印字符串或返回单个字符串或一组字符串来输出字符串列表。
参考实现
(C#)
IEnumerable<string> Sample(IList<int> input) {
for (int i = 0; i < input.Count; ) {
var start = input[i];
int size = 1;
while (++i < input.Count && input[i] == start + size)
size++;
if (size == 1)
yield return start.ToString();
else if (size == 2) {
yield return start.ToString();
yield return (start + 1).ToString();
} else if (size > 2)
yield return start + " - " + (start + size - 1);
}
}
【问题讨论】:
-
问题的CW是removed a while ago。我也相信程序员应该是代码高尔夫应该去的地方(至少根据常见问题解答和 Jeffs 的帖子)。
-
@Oded,@SLaks,到目前为止,这里是打码高尔夫的合适场所。
-
CW 请求应该通过标志来完成,而不是通过问题中的上述提示来完成。我已经为你做了。
-
喜欢这些 Code Golf 和其他谜题吗?提交到Code Golf & Programming Puzzles area51 proposal。
-
重复问题和剧透 - 已在 codegolf.com/home-on-the-range 中发布。请不要在此处发布解决方案,以免解决方案被用来夸大 codegolf.com 上的排名
标签: language-agnostic code-golf