挑战说明
我们遇到了一些涉及外观序列的挑战。快速提醒:
- 序列开头
1
, - 该序列的后续项是通过枚举上一项中的每组重复数字而产生的,
因此,前几个术语是:
1 "one"
11 "one one" (we look at the previous term)
21 "two ones"
1211 "one two, one one"
111221 "one one, one two, two ones"
312211 "three ones, two twos, one one"
现在让我们做同样的事情,但是要使用罗马数字。我们从开始I
并遵循相同的规则(我们将数字计数规则应用于字符,因此我们将其读IVX
为one one, one five, one ten
而不是one four, one ten
或某种其他方式):
I "one"
II "one one"
III "two ones" = "II" + "I"
IIII "three ones" = "III" + "I"
IVI "four ones" = "IV" + "I"
IIIVII "one one, one five, one one"
IIIIIVIII "three ones, one five, two ones" = ("III" + "I") + ("I" + "V") + ("II" + "I")
给定一个正整数N
,则:
- 输出
N
此序列的第一个数字(可以使用任何合理的分隔符,["I", "II", "III", ...]
N
此序列的输出项(可以为0索引)。
记住要使代码尽可能短,因为这是代码高尔夫的挑战!
编辑:我相信,总是存在一种将整数表示为罗马数字的标准/首选方式(例如95
-> XCV
而不是VC
)。我在网上发现了几个罗马数字转换器,这证实了我的观点。如有疑问,请使用在线转换器,因为列出所有可能的边缘情况和书写罗马数字的特定规则并不是这一挑战的重点。
EDIT2:@PeterTaylor和@GregMartin指出,只有数小于或等于5
出现的顺序,所以你不必对罗马数字的不确定性的担心(数字1
- 8
是I
,II
,III
,IV
,V
,VI
,VII
,和VIII
)
4
/ IV
/ IIII
吗?或95
/ XCV
/ VC
?不一定总是有一种独特的方式来表达整数,但是我敢肯定,总会有一种首选的(标准)方式-如果我写错了,请更正我。