|
100鱼币
本帖最后由 jerryxjr1220 于 2017-6-20 14:42 编辑
Python的编程技能还是要靠平时不断地练习才能提高,为了提高大家的积极性,特别设立了这个精英挑战赛,希望大家多多参与!
本期挑战赛限时3天,截止日:6月22日24时,参赛人员:python论坛任何人员(包括版主)。
截止日后,从所有提交的解答中评选出最优秀的解答,奖励100鱼币。评选依据:答案正确,用时较短,代码优雅。
另外,如果有创意的解题方法,会酌情追加奖励!
本期题目:非负整数进制转换
我们按照62进制的 [ 0 ~ 9, A ~ Z, a ~ z]的顺序 与 [ 0 ~ 61]一一对应。如果<62进制,则靠前匹配。如36进制 [0 ~9, A ~ Z]与[0 ~ 35]一一对应。
那么,36进制的“FISHC”如果转化成16进制就应当是“18DCFB0”。 62进制的“FISHC”如果转化成26进制就应当是“J0GO26”。
显然,“18DCFB0”至少是16进制,因为“F"表示15。
现在请设计一个进制计算函数Calc(rawdata,newdata),输出原始的进制n和转化后的进制m,如Calc(“FISHC”,“18DCFB0”)-> (36,16)。
注意若输出有多个答案,应当遵循n和m都尽可能小的原则。n和m的取值范围:2<=m, n<=62。rawdata和newdata为字符串格式,字符串长度1 ~ 128位.
测试数据集:
- Test = [('A', '11'),
- ('18', '18'),
- ('ABC', '41I'),
- ('3d8B', '254731'),
- ('FISHC', '18DCFB0'),
- ('python', 'B1687AEA1'),
- ('10110111010010010010101000101010', '11TIFA8BPMTL0'),
- ('10110111010010010010101000101010010101010101010010101001010100101101010101010010101001010100101010101010010101001010010101001010', '5Zr1zn3pm5znjGepqkPmDC')]
复制代码
本期挑战的题目已经降低难度,欢迎大家积极参与!
@SixPy @冬雪雪冬 @~风介~ @小甲鱼
- import string
- a = string.printable[:62]
- a = a[:10] + a[-26:] + a[10:36]
- str_table = dict((a[i],i) for i in range(len(a)))
- def convert(a, n):
- x = 0
- for each in a:
- x += str_table[each]
- x*= n
- return x//n
- def findmax(a):
- mmax = 0
- for each in a:
- if str_table[each] > mmax:
- mmax = str_table[each]
- return mmax + 1
- def calc(a, b):
- m = findmax(a)
- n = findmax(b)
- for i in range(m, 63):
- for j in range(n, 63):
- if convert(a, i) == convert(b, j):
- print((i, j))
- return i, j
-
- Test = [('A', '11'),
- ('18', '18'),
- ('ABC', '41I'),
- ('3d8B', '254731'),
- ('FISHC', '18DCFB0'),
- ('python', 'B1687AEA1'),
- ('10110111010010010010101000101010', '11TIFA8BPMTL0'),
- ('10110111010010010010101000101010010101010101010010101001010100101101010101010010101001010100101010101010010101001010010101001010', '5Zr1zn3pm5znjGepqkPmDC')]
- for each in Test:
- calc(each[0], each[1])
复制代码
结果是
(11, 9)
(9, 9)
(16, 26)
(40, 10)
(36, 16)
(62, 16)
(4, 36)
(2, 62)
|
最佳答案
查看完整内容
结果是
(11, 9)
(9, 9)
(16, 26)
(40, 10)
(36, 16)
(62, 16)
(4, 36)
(2, 62)
|