我正在为foo.bar进行练习,基本思想是获取一个整数列表,并对它做一些事情来派生该列表的特定子集,则XOR(对于校验),通过此装置的那些值:是否有人可以在Python 3中解释XOR(用于校验和)
result = 0^1^2^3^4^6
其等于2
又如:
result2 = 17^18^19^20^21^22^23^25^26^29
它等于14
我不太确定这里发生了什么,以及这些值(2,14)是如何得出的。
从Foo.Bar问题实际说明
>排队做
你几乎可以让您的移动摧毁LAMBCHOP末日设备,但这样守护安检底层LAMBCHOP系统将成为一个问题。你可以在不发出任何警报的情况下取下一个,这太棒了!除了作为Lambda指挥官的助理之外,您已经了解到检查点即将进行自动化审查,这意味着您的破坏行为将被发现并且您的掩护将被清除 - 除非您可以欺骗自动审查系统。
为了欺骗系统,您需要编写一个程序来返回安全校验和,以便在他们检查完所有工作人员之后,安全校验和将会具有相同的安全校验和。幸运的是,Lambda指挥官对效率的渴望不会允许长达数小时的线路,所以检查站警卫已经找到了加快传递速度的方法。与其检查每一位工作人员经过的情况,监视人员会在注意安全ID的同时检查每个人,然后让该行填满。一旦他们完成了这些工作,他们就会再次离开这条线,这次离开了最后一名工人。他们继续这样做,每次都从队伍中除去一名工作人员,但记录他们检查的人员的安全ID,直到他们跳过整条线路,此时他们将所有记录的工作人员的ID与检查和进行异或,然后起飞吃午饭。幸运的是,工人的有序性让他们总是按照数字顺序排列,没有任何差距。
例如,如果在第一线工人具有ID 0和安全检查线保持三名工人,处理是这样的:
0 1 2/
3五分之四
6/7 8
其中守卫的XOR(^)校验和为0^1^2^3^4^6 == 2。
同样地,如果第一个工人具有ID 17和检查点保持四名工人,则处理将如下所示:
17 18 19 20/
21 22 23/24
25 26/27 28
29/30 31 32
产生校验和17^18^19^20^21^22^23^25^26^29 == 14
组所有工人的ID(包括第一工人)是0和20亿(含)之间,和检查点线将总是至少1名工人长。
有了这些信息,写一个函数的答案(起点,长度),将通过输出相同的校验守卫会在午餐前通常提交缺少的安全检查覆盖。在自动检查发生之前,您只有足够的时间来查找要检查的第一个工人的ID(开始)和行的长度(长度),因此您的程序必须使用这两个值生成适当的校验和。
测试用例
输入:
(int) start = 0
(int) length = 3
输出:
(int) 2
输入:
(int) start = 17
(int) length = 4
输出:
(int) 14
太棒了,谢谢你的解释。这现在更有意义了。你已经明确指出了我的正确方向。 –