许多编程语言通过将数字“连接”到现有数字的末尾来构造大整数。例如,迷宫或Adapt。通过将数字连接到末尾,我的意思是,如果现有数字为45,并且数字为7,则结果数字为457(45×10+7)。
构造的数目是可以通过使用单个数字的倍数来构建这样的数:1,2,3,4,5,6,7,8,9 AKA在这9个序列中的一个元素:
1,12,123,1234,12345,…
2,24,246,2468,24690,…
3,36,369,3702,37035,…
4,48,492,4936,49380,…
5,60,615,6170,61725,…
6,72,738,7404,74070,…
7,84,861,8638,86415,…
8,96,984,9872,98760,…
9,108,1107,11106,111105,…
为了提供如何构造序列的示例,以下a=3的序列在构造中的方式:
u1=u2=u3=u4=u5=u6=a=10×u1+2×a=10×u2+3×a=10×u3+4×a=10×u4+5×a=10×u5+6×a=330+6360+93690+1237020+15370350+18=3=36=369=3702=37035=370368
⋮
u33=u34=10×u32+33×a=10×u33+34×a=37…260+9937…359+102=37…359=37…3692
⋮
u33和u34包括以证明当n×a≥100。一个很大的数字点缀出空间。
仍然不清楚如何构建这些序列,因此这里有两种不同的理解方式:
每个序列都从一位开始。通过取该数字的下一个倍数,将前一项乘以10并乘以倍数,可以找到下一项。按顺序来讲:
un=10×un−1+n×a,u1=a
其中a是一位数字(1个到9)
序列中任意点的9元素中的每个元素(例如,n=3)都是123…从1到9的倍数,其中123…由un+1=10×un+n (1 ,12 ,123 ,... ,123456789 ,1234567900 ,12345679011 ,... )
因此,第一个值是1 × 1 ,2 ,3 ,... ,8 ,9,第二是12 × 1 ,2 ,3 ,... ,8 ,9,第三123 × 1 ,2 ,3 ,... ,8 ,9等
您的任务是将一个构造的数字用作输入,并输出用于构造它的初始数字。您可以假设输入将始终是一个构造数字,并且将大于0。它可能是一个数字,它会映射回自身。
您可以以任何合理的方式进行输入,包括以数字列表,字符串等形式。以一元或您选择的任何其他基数进行输入(尽管不建议)。
这是一个代码高尔夫球,因此最短的代码胜出!
测试用例
u_n => a
37035 => 3
6172839506165 => 5
5 => 5
246913580244 => 2
987654312 => 8
61728395061720 => 5
1111104 => 9
11111103 => 9
111111102 => 9
2469134 => 2
98760 => 8
8641975308641962 => 7
或作为两个列表:
[37035, 6172839506165, 5, 246913580244, 987654312, 61728395061720, 1111104, 11111103, 111111102, 2469134, 98760, 8641975308641962]
[3, 5, 5, 2, 8, 5, 9, 9, 9, 2, 8, 7]
当我发布此挑战时,我没有意识到可以使用格里米答案中的方法来简化它,因此,对于使用更数学方法而非数字的答案非常感兴趣。技巧(显然,所有有效答案都同样有效,正是我所希望看到的)。