输入:
每项位于2-36范围内的整数的列表/数组。
输出:
整数之和(作为基数10),其中每个下一个整数位于前一个值的基数中(从一个常规基数10开始)。
示例:
假设我们有这样的输入:[4, 12, 34, 20, 14, 6, 25, 13, 33]
那么我们有这样一笔钱:
4 (4 in base-10) +
6 (12 in base-4 ) +
40 (34 in base-12) +
68 (20 in base-34) +
24 (14 in base-20) +
6 (6 in base-14) +
17 (25 in base-6 ) +
28 (13 in base-26) +
42 (33 in base-13)
= 235数学基础解释:
我考虑过假设每个人都知道基是如何工作的,但我会给出一个简单的例子,说明它是如何工作的,以防万一。以34 in base-12为例,我们是如何获得40的?
1-34 in regular base-10:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34
So, from 1 to 34 is 34 steps in base-10
1-34 in base-12:
1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 1A, 1B, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 2A, 2B, 30, 31, 32, 33, 34
So, from 1 to 34 is 40 steps in base-12这里也许有一个有用的计算器。
1-100 /见测试用例)。19 in base-6或6 in base-6的东西,因为基-6只包含数字0-5)。[4, 12, 34, 20, 14, 6, 25, 13, 33] -> 235
4+ 6+ 40+ 68+ 24+ 6+ 17+ 28+ 42
[5, 14, 2, 11, 30, 18] -> 90
5+ 9+ 2+ 3+ 33+ 38
[12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 12, 2, 11, 3, 10, 2, 10] -> 98
12+ 13+ 11+ 9+ 8+ 7+ 6+ 5+ 4+ 3+ 5+ 2+ 3+ 3+ 3+ 2+ 2
[36, 36] -> 150
36+ 114发布于 2016-09-23 08:27:03
lambda a:sum(map(int,map(str,a),[10]+a))测试在意为
map(str, a)创建一个生成器G,该生成器对a中的每个值调用str,并转换为字符串。
map(int, G, [10]+a)创建了一个生成器,该生成器为跨G和[10]+a的对调用int(g, v)
int(g, v)从整数基v转换字符串g (如果v在[2,36]中且g是有效的)
sum做它在罐头上说的
发布于 2016-09-23 08:10:44
lambda a:sum(int(`x`,y)for x,y in zip(a,[10]+a))测试在意为
zip(a,[10]+a)遍历a中的值对和第一个值的前一个值或10。
backticks在int调用中将x转换为字符串s
int(s, y)从整数基y转换字符串s (如果y在[2,36]中且s是有效的)
sum做它在罐头上说的
发布于 2016-09-23 07:43:04
ṙ1DḅṖḌS在网上试试!
https://codegolf.stackexchange.com/questions/94259
复制相似问题