kattis:密码学的关键

时间:2018-08-25 00:02:04

标签: python-3.x kattis

因此,我一直在讨论开放式凯蒂问题,这些问题通常很容易解决,也很有趣,很少有问题可以解决。我从最简单的问题开始,一直在努力。目前,我正在研究称为“密码学的关键”(https://open.kattis.com/problems/keytocrypto)的问题。我在python3中有解决该问题的方法,但是在第6个测试用例中,我遇到了运行时错误,并且正在努力找出我的代码中有什么地方抛出该错误。不幸的是,它们只为您提供非常有限的反馈和测试用例。这是我的解决方案:

cypher = [ch for ch in input().strip()]
secret = [ch for ch in input().strip()]
og_secret = secret
if len(secret) > len(cypher):
    for i in range(len(secret) - len(cypher)): secret.pop()
    og_secret = secret
shifts = {'A':0, 'B':1, 'C':2, 'D':3, 'E':4, 'F':5, 'G':6,
          'H':7, 'I':8, 'J':9, 'K':10, 'L':11, 'M':12, 'N':13,
          'O':14, 'P':15, 'Q':16, 'R':17, 'S':18, 'T':19,'U':20,
          'V':21, 'W':22, 'X':23, 'Y':24, 'Z':25}
shiftnums, cyphernums, ans = [], [], []
cyphernums = [shifts.get(ch) for ch in cypher]
while len(ans) < len(cypher):
    secret = og_secret + ans
    shiftnums, ans = [], []
    shiftnums = [shifts.get(ch) for ch in secret]
    for i in range(len(secret)):
        shift = cyphernums[i] - shiftnums[i]
        if shift < 0: shift = 26 + shift
        ans.append(list(shifts.keys())[list(shifts.values()).index(shift)])
print (''.join(ans))

提供的测试用例是:

SGZVQBUQAFRWSLC
ACM

应该(并确实)产生答案:

SENDMOREMONKEYS

非常感谢您的帮助。

0 个答案:

没有答案