SRM146 DIV1 600

枚举所有情况,依次判断情况是否合法,合法则计数器加一。这里的关键是给定secret和guess如何生成result

 1 import re
 2 
 3 def processResult(result):
 4     r = re.search('(\d)b (\d)w', result)
 5     b = int(r.group(1))    
 6     w = int(r.group(2))
 7     return (b, w)
 8 
 9 def isvalid(x, guesses, results):
10     lie = 0
11     for i in range(0, len(guesses)):
12         g = guesses[i]
13         r = results[i]
14         w = 0
15         b = 0
16         gflags = [False, False, False, False]
17         xflags = [False, False, False, False]
18         for j in range(0, 4):
19             if x[j] == g[j]:
20                 b = b + 1
21                 xflags[j] = gflags[j] = True
22 
23         for j in range(0, 4):
24             if not gflags[j]:
25                 for k in range(0, 4):
26                     if not xflags[k] and g[j] == x[k]:
27                         xflags[k] = True
28                         w = w + 1
29                         break
30 
31         if not (b == r[0] and w == r[1]):
32             lie = lie + 1
33             if lie > 1:
34                 return False
35 
36     if lie == 1:
37         return True
38     else:
39         return False
40     
41 class Masterbrain:
42     def possibleSecrets(self, guesses, results):
43         results = [processResult(x) for x in results]
44         tot = 0
45         for x0 in range(1, 8):
46             for x1 in range(1, 8):
47                 for x2 in range(1, 8):
48                     for x3 in range(1, 8):
49                         x = str(x0 * 1000 + x1 * 100 + x2 * 10 + x3)
50                         if isvalid(x, guesses, results):
51                             tot = tot + 1
52 
53         return tot
View Code

 

posted @ 2013-10-31 23:50  valaxy  阅读(145)  评论(0编辑  收藏  举报