枚举所有情况,依次判断情况是否合法,合法则计数器加一。这里的关键是给定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