定义
有无穷级数的连接自然数(以1开头的正整数):
1234567891011121314151617181920212223...
挑战
- 以任何语言编写程序,该程序接受位置编号作为输入,并从上面定义的行中的该位置输出数字。
- 位置编号是任意大小的正整数。那是第一个位置是1,产生输出数字“ 1”
- 输入可以是十进制数(例如13498573249827349823740000191),也可以是对应于正整数的e表示法(例如1.2e789)。
- 程序必须在合理的时间内(在现代PC / Mac上为10秒)结束,并给出非常大的索引作为输入(例如1e123456-即1表示123456为零)。因此,简单的迭代循环是不可接受的。
- 如果输入无效,程序必须在1 s内以错误终止。例如。1.23e(无效)或1.23e1(等于12.3-不是整数)
- 可以使用公共BigNum库来解析/存储数字并对其进行简单的数学运算(+-* / exp)。没有应用字节惩罚。
- 最短的代码胜出。
TL; DR
- 输入:bignum整数
- 输出:无限行中该位置的数字
123456789101112131415...
一些验收测试用例
表示法为“输入:输出”。他们都应该通过。
- 1:1
- 999:9
- 10000000:7
- 1e7:7(与上面的行相同)
- 13498573249827349823740000191:6
- 1.1e10001:5
- 1e23456:5
- 1.23456e123456:4
- 1e1000000:0
- 1.23e:错误(语法无效)
- 0:错误(超出范围)
- 1.23e1:错误(不是整数)
奖金!
在编号内输出数字位置编号,并输出编号本身。例如:
13498573249827349823740000191: 6 24 504062383738461516105596714
- 数字'50406238373846151610559 6 714'的位置24处的数字' 6 '
1e1000000: 0 61111 1000006111141666819445...933335777790000
- 999995位数字长数字的位置61111处的数字“ 0”,在此不再赘述。
如果您完成奖金任务,请将代码大小乘以0.75
信用
这项任务是在2012年的devclub.eu一次聚会上完成的,没有大量要求。因此,提交的大多数答案都是琐碎的循环。
玩得开心!
我真的不明白挑战是什么。我们应该在那个位置输入并输出数字吗?
—
The_Basset_Hound 2015年
这是OEIS序列33307。
—
蒂洛2015年
@vihan使用某些公共bignum库是可以接受的。没有惩罚。当然,将解决方案包括到库中并以单行方式使用库正在考虑作弊。常识在这里适用。
—
metalim 2015年
只是想展示一个令人惊讶的简洁F#解决方案,时钟为44字节。当然,它只能处理不超过2 ^ 31-1的索引(并且在我编写此代码时,它仍在尝试计算该值)。我没有发布此消息,因为它确实违反了规则,但是我想说它对F#来说相当不错!
—
Jwosty 2015年
处理输入的要求(如
—
xnor 2015年
1.23456e123456
任意处理)会惩罚无法本地处理此类值的语言,并要求它们进行与挑战相切的字符串处理。