免责声明:虽然我现在已经出于娱乐目的而在此网站上停留了一段时间,但这是我的第一个问题,因此请原谅任何小错误。
背景
当给我们分配作业时,我的老师确实很烦人,并写出了我们必须单独处理的所有问题。因此,我花了很长时间来抄写我必须做的问题。我想让我的生活更轻松,我会给他发送一个程序,该程序可以使问题列表占用更少的空间。
写下页面或问题编号的列表时,我们用破折号表示范围。例如,19-21
变为19, 20, 21
。如果两者之间有间隔,则使用两个逗号分隔的范围:19-21, 27-31
变为19, 20, 21, 27, 28, 29, 30, 31
。
现在,您可能正在思考:“这似乎很琐碎”。实际上,这已经在这里和这里得到了解答。
但是,有一个陷阱。如果我们有一个相等的连续数字范围,则可以省去重复的数字。例如:15, 16, 17
成为15-7
和107, 108, 109
成为107-9
。作为奖励,如果最后一个连续的相等数字大1,并且上限的最后一个数字小于或等于下限,则可以省略以下内容(对不起,这听起来令人困惑;也许有些示例可以清除它) 。109-113
变为109-3
,因为最后一位低表示增加10位。
挑战
您的程序应通过输入获取整数列表(无论您的语言是标准语言还是函数)。您可以决定此列表是逗号分隔,空格分隔还是实际的列表/数组。
输出最短的方法(首先按范围数排序,然后按范围内的字符总和排序)以使用此表示法表示该列表。每个虚线范围必须在同一行上,但是范围可以用逗号或换行符分隔(允许使用尾随的换行符或逗号)。这些范围必须是有序的。
由于我们学校的Wi-Fi非常糟糕,我必须将文件制作得尽可能小才能发送给他。最短的代码(以字节为单位)获胜。
奖金
我的老师草率,所以有一些事情可以帮助他。多个奖金通过乘法叠加,例如-10%奖金(x 90%)和-25%(x 75%)奖金= 90%* 75%= x 67.5%(-32.5%奖金)。
- 有时他把它们放在错误的顺序(他不是数学老师)。如果您的程序可以接受未按最小到最大排序的整数,则收取-20%的奖金。
- 我们的书很奇怪,每一节都从-10开始计算问题。如果您的程序可以接受负数,则取-25%。
- 如果它接受较低的最后一位数字的奖金,该奖金增加10位,例如
25-32
减少到25-2
,则获得-50%的奖金。
测试用例
In: 1, 2, 3, 4, 5
Out: 1-5
In: 3, 4, 5, 9, 10, 11, 12
Out: 3-5, 9-12
In: 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160
Out: 149-60
In: 1 2 3 4
Out: 1-4
For bonuses:
In: 109, 110, 111, 112, 113
Out: 109-3
In: 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29
Out: 19-9
In: -3, -2, -1, 0, 1, 2
Out: -3-2
In: -3, -2, -1
Out: -3--1
答案将于2015年12月19日(星期六)接受。
GLHF!
149 150 151 152 153 154 155 156 157 178 159 160
?
19-9
的19,20,...,29
不是19-29
该文本所暗示的。那么哪个正确呢?
1-4 9-2
?