上周看到刘谦在表演“读心术”。
表演方式如下:
1. 让嘉宾心里默想一个数字,在0-63之间。
2. 依次给嘉宾看六张牌,每张牌上有若干个数字(我猜想是32个)。
3. 让嘉宾回答,心理默想的数字有没有在扑克牌上。
4. 六张牌看完,刘谦写出一个数字,然后让嘉宾说出心里默想的数。
5. 吻合,掌声雷动。
我看了之后,挺晕的……看来术业有专攻……这么简单的二进制问题,也能拿来做魔术表演。
于是写了个程序来模拟刘谦的魔术,变给老婆看……
1 import sys
2
3 NUM =6
4 LINE_NUM =70
5
6 maxMargin =1<< NUM
7 numList = range(0, maxMargin)
8
9 resultNum = 0
10
11 for x in range(0, NUM):
12 print"="* LINE_NUM
13
tmpSet = set([(tmpNum |1<< x) for tmpNum in numList])
14 for (tmpNum, tmpCount) in zip(list(tmpSet), range(1, len(tmpSet) +1)):
15
sys.stdout.write("%d\t"% tmpNum)
16 if tmpCount %8== 0:
17 print""
18 print"="* LINE_NUM
19 print""
20
21
tmpStr = raw_input("Is the number in list? n(y/n)?\n")
22
tmpStr = tmpStr.strip()
23 if (tmpStr =="y"):
24
resultNum +=1<< x
25
26 print"The number is: %d"% resultNum