Python 安全破解澳大利亚信息学奥林匹克2009中级

Python 安全破解澳大利亚信息学奥林匹克2009中级,python,algorithm,python-3.x,Python,Algorithm,Python 3.x,嗨,最近我在尝试AIO 2009中级版的一个问题 问题(重新表述)是: 有一个正整数序列,每个正整数都通过非负常数k加密(通过将k添加到序列中的每个值,k没有边界,只要a和b的以下边界保持不变),以给出整数a的列表。我们得到了原始非加密列表b的一小部分,因此2假设您得到了以下“加密”整数列表: E1 = [200,450,100,75,275,500,600,400,300] 以及解密的子列表。如下所示: L1 = [25,225,450,550,350] 将L1转换为一个新数组L2,这样每

嗨,最近我在尝试AIO 2009中级版的一个问题

问题(重新表述)是:


有一个正整数序列,每个正整数都通过非负常数k加密(通过将k添加到序列中的每个值,k没有边界,只要a和b的以下边界保持不变),以给出整数a的列表。我们得到了原始非加密列表b的一小部分,因此2假设您得到了以下“加密”整数列表:

E1 = [200,450,100,75,275,500,600,400,300]
以及解密的子列表。如下所示:

L1 = [25,225,450,550,350]
将L1转换为一个新数组L2,这样每个元素都是其自身和前一个元素之间的差异。即
L2[i]=L1[i]-L1[i-1]
。对于L2[0],让它为零

L2 = [0,200,225,100,-200]
删除第一个元素(
L2=L2[1://code>)

现在,对加密列表执行相同的标准化:

E2 = [250,-350,-25,200,225,100,-200,-100]
现在,在规范化列表上执行经典的子字符串搜索,以查找L2在E2中开始的匹配索引

def findStartIndex(needle, haystack):
    j = 0
    while len(needle) < len(haystack[j:])
         if (needle == haystack[j:j+len(needle)]
             return j
         j = j + 1
    return -1

index = findStartIndex(L2, E2)
def findStartIndex(针式、草堆式): j=0 而len(针)
如果上面的搜索返回一个整数值:
index
(在本例中为
3
):

那么键
k
就是:
E1[index]-L1[0]


在这个例子中,
k
50

加密意味着什么?xor'ed?k和原始整数的边界是什么?如果可能有多个解怎么办?@kfx我已经编辑了这个问题,谢谢你指出!我想我在示例数组中有一两个输入错误。我会在以后有更多时间更正今晚。更新和验证。
def findStartIndex(needle, haystack):
    j = 0
    while len(needle) < len(haystack[j:])
         if (needle == haystack[j:j+len(needle)]
             return j
         j = j + 1
    return -1

index = findStartIndex(L2, E2)