哈密顿行动0x00--图灵测试

哈密顿行动 - 一个虚拟的、在线的计算机安全技术体验游戏,通过该游戏,可以测试您的“黑客技能”。

图灵测试

图灵测试,是由历史上著名的计算机学家,也是计算机之父,第一台原型计算机——图灵机的创造者阿兰·图灵所提出的,图灵测试的目的,是为了验证计算机能否拥有像人类一样的思考能力。这项测试由一个测试者(A),和一个被测试者组成(B)。测试者A是人类,被测试者B,可能是人类,也可能是计算机。A通过向B提一定数量的问题,B进行回答,然后A由B反馈的信息,判断B是人类还是计算机。在这项测试中,事先并不告诉A,B是人类还是计算机。B如果作为一台机器,如果有超过30%的A,认为B是人类,那么证明计算机是有智能的。

开始游戏前需要一个账号,而通过了这个叫做但不是的“图灵测试”之后才能注册。

关卡描述

1
2
3
4
5
6
A:98503264587102541690 - 68034165897022102600  
B:90534205890120542090
A:59703214569802513647 - 13983025584603517840
B:59980225089803007807
A:56055201367950321158 - 56630489702544691502
B:???

关卡解答

其实就是一个找规律的题目,先分析下第一组数据的输入和输出:

1
2
3
4
  98503264587102541690
- 68034165897022102600
-----------------------
90534205890120542090

观察后很容易可以发现这里的“-”运算,相当于一种位运算。减数和被减数逐位比较,如果两个数相等,则进行“-”运算后结果为0,如果两数不想等,则运算结果为两数中的最大值。
这个运算量不大,笔算就可以完成,不过还是准备用python写一下练练手。

1
2
3
4
5
6
7
8
9
10
from functools import reduce

# define operation of '-'
def minus(num1, num2):
l1 = [i for i in str(num1)]
l2 = [i for i in str(num2)]
l3 = list(map(lambda a, b: '0' if a == b else max(a, b), l1, l2))
print (reduce(lambda a, b: a + b, l3))

minus(56055201367950321158, 56630489702544691502)

主要是为了熟悉map和reduce的用法,记个小坑,py3中的reduce在functools包里,需要先导入才能使用。