用python写了一个,最后一步出不来
x=26
L=[{i,j,k,l} for i in range(1,x) for j in range(i+1,x) for k in range(j+1,x) for l in range(k+1,x)]
print(len(L))
'''
b=[(1,[1,2,3,4]),
(2,[2,3,4,5]),
(3,[6,7,8,9]),
(4,[7,8,9,10]),
(5,[11,12,13,14]),
(6,[12,13,14,15]),
(7,[16,17,18,19]),
(8,[17,18,19,20]),
(9,[21,22,23,24]),
(10,[22,23,24,25]),
(11,[1,6,11,16]),
(12,[6,11,16,21]),
(13,[2,7,12,17]),
(14,[7,12,17,22]),
(15,[3,8,13,18]),
(16,[8,13,18,23]),
(17,[4,9,14,19]),
(18,[9,14,19,24]),
(19,[5,10,15,20]),
(20,[10,15,20,25])]
'''
def find(b,n):
a={}
for i in L:
cnt=0
for j in b:
if set(j[1]).intersection(i):cnt+=1
if cnt==n:
#print(i)
a=i
break
return a
def guess(bar,four):
return four.intersection(bar)
def party(b,four):
return list(filter(lambda x:four.intersection(x[1]),b))
def partn(b,four):
return list(filter(lambda x:not four.intersection(x[1]),b))
def lookfor(bar):
four=find(b,10) #random start
print('guess',four)
if guess(bar,four):
print('Y')
four=find(party(b,four),5)
else:
four=find(partn(b,four),5)
print('N')
lookfor({12,13,14,15})
def lookforw(bar):
four=find(b,10) #random start
n=10
b0=b
while n>0:
n=int(n/2)
print('guess',four)
if guess(bar,four):
print('Y')
b0=party(b0,four);print(b0)
four=find(b0,n)
else:
print('N')
b0=partn(b0,four);print(b0)
four=find(b0,n)
lookforw({12,13,14,15})
guess {1, 2, 13, 6}
Y
[(1, [1, 2, 3, 4]), (2, [2, 3, 4, 5]), (3, [6, 7, 8, 9]), (5, [11, 12, 13, 14]), (6, [12, 13, 14, 15]), (11, [1, 6, 11, 16]), (12, [6, 11, 16, 21]), (13, [2, 7, 12, 17]), (
), (16, [8, 13, 18, 23])]
guess {1, 2, 3, 4}
N
[(3, [6, 7, 8, 9]), (5, [11, 12, 13, 14]), (6, [12, 13, 14, 15]), (12, [6, 11, 16, 21]), (16, [8, 13, 18, 23])]
guess {1, 2, 3, 6}
N
[(5, [11, 12, 13, 14]), (6, [12, 13, 14, 15]), (16, [8, 13, 18, 23])]
guess {8, 1, 2, 3}
N
[(5, [11, 12, 13, 14]), (6, [12, 13, 14, 15])]
|