Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def product(*args, repeat=1):
- pools = [list(pool) for pool in args] * repeat
- result = [[]]
- for pool in pools:
- result = [x+[y] for x in result for y in pool]
- for prod in result:
- yield list(prod)
- def sort_list(total_list):
- d0=list()
- d1=list()
- d2=list()
- d3=list()
- d4=list()
- for x in total_list:
- mlist=list()
- alist = x
- n = 0
- while n<4:
- m = alist.count(alist[n])
- mlist.append(m)
- n = n + 1
- if max(mlist)==1:
- d0.append(alist)
- elif max(mlist)==2 and mlist.count(2)==2:
- d1.append(alist)
- elif max(mlist)==2 and mlist.count(2)>2:
- d2.append(alist)
- elif max(mlist)==3 :
- d3.append(alist)
- elif max(mlist)==4 :
- d4.append(alist)
- total_list = d0+d1+d2+d3+d4
- possible = [''.join(p) for p in total_list]
- return total_list
- def computeFeedback(code,guess):
- b = 0
- w = 0
- inCodeCount = {'A':0,'B':0,'C':0,'D':0, 'E':0, 'F':0}
- inGuessCount = {'A':0,'B':0,'C':0,'D':0, 'E':0, 'F':0}
- for i in range(0,4):
- if code[i] == guess[i]:
- b += 1
- inCodeCount[code[i]]+=1
- inGuessCount[guess[i]]+=1
- for ch in inCodeCount:
- w+=min(inCodeCount [ch], inGuessCount [ch])
- w-=b
- feedback = str(w)+'w'+str(b)+'b'
- return feedback
- guesscount=0
- code=input()
- while guesscount<8:
- guesscount += 1
- if guesscount==1:
- guess='ABCD'
- print("My guess is:",guess)
- feedback=computeFeedback(code,guess)
- if feedback!='0w4b':
- combinations=sort_list([''.join(x) for x in product('ABCDEF',repeat=4)])
- overlap=list()
- for x in combinations:
- fb=computeFeedback(guess,x)
- overlap.append(x)
- if fb != feedback:
- overlap.pop()
- common=overlap
- overlap=list()
- else:
- print("Game Over in", guesscount,"steps")
- break
- if guesscount==2:
- guess='BCDE'
- print("My guess is:",guess)
- feedback=computeFeedback(code,guess)
- if feedback!='0w4b':
- combinations=sort_list([''.join(x) for x in product('ABCDEF',repeat=4)])
- overlap=list()
- for x in combinations:
- fb=computeFeedback(guess,x)
- overlap.append(x)
- if fb != feedback:
- overlap.pop()
- common=[token for token in overlap if token in common]
- overlap=list()
- else:
- print('Game Over in,', guesscount,'steps')
- break
- if guesscount==3:
- guess='CDEF'
- print("My guess is:",guess)
- feedback=computeFeedback(code,guess)
- if feedback!='0w4b':
- combinations=sort_list([''.join(x) for x in product('ABCDEF',repeat=4)])
- overlap=list()
- for x in combinations:
- fb=computeFeedback(guess,x)
- overlap.append(x)
- if fb != feedback:
- overlap.pop()
- common=[token for token in overlap if token in common]
- overlap=list()
- else:
- print('Game Over in', guesscount,'steps')
- break
- if guesscount==4:
- if common[0]=="acfb".upper():
- guess="dcad".upper()
- if common[0]=="aebf".upper():
- guess="edfd".upper()
- if common[0]=='AEFB':
- guess='EACC'
- if common[0]=='AFBE':
- guess='BFCD'
- if common[0]=='BAFE':
- guess='EADC'
- if common[0]=='BEAF':
- guess='EDAE'
- if common[0]=='BEFA':
- guess='EEDA'
- if common[0]=='EABF':
- guess='FDFB'
- if common[0]=='AADB':
- guess='BABD'
- if common[0]=='ABAE':
- guess='BBCC'
- if common[0]=='AEAF':
- guess='CFFD'
- if common[0]=='CAFA':
- guess='FDFA'
- if common[0]=='AAEE':
- guess='DDDF'
- else:
- guess=common[0]
- print("My guess is:",guess)
- if len(common)>1:
- common.pop(0)
- feedback=computeFeedback(code,guess)
- if feedback!='0w4b':
- combinations=sort_list([''.join(x) for x in product('ABCDEF',repeat=4)])
- overlap=list()
- for x in combinations:
- fb=computeFeedback(guess,x)
- overlap.append(x)
- if fb != feedback:
- overlap.pop()
- common=[token for token in overlap if token in common]
- overlap=list()
- else:
- print('Game Over in', guesscount,'steps')
- break
- else:
- print('Game Over in', guesscount,'steps')
- break
- if guesscount==5:
- guess=common[0]
- print("My guess is:",guess)
- if len(common)>1:
- common.pop(0)
- feedback=computeFeedback(code,guess)
- if feedback!='0w4b':
- combinations=sort_list([''.join(x) for x in product('ABCDEF',repeat=4)])
- overlap=list()
- for x in combinations:
- fb=computeFeedback(guess,x)
- overlap.append(x)
- if fb != feedback:
- overlap.pop()
- common=[token for token in overlap if token in common]
- overlap=list()
- else:
- print('Game Over in', guesscount,'steps')
- break
- else:
- print('Game Over in', guesscount,'steps')
- break
- if guesscount==6:
- guess=common[0]
- print("My guess is:",guess)
- if len(common)>1:
- common.pop(0)
- feedback=computeFeedback(code,guess)
- if feedback!='0w4b':
- combinations=sort_list([''.join(x) for x in product('ABCDEF',repeat=4)])
- overlap=list()
- for x in combinations:
- fb=computeFeedback(guess,x)
- overlap.append(x)
- if fb != feedback:
- overlap.pop()
- common=[token for token in overlap if token in common]
- overlap=list()
- else:
- print('Game Over in', guesscount,'steps')
- break
- else:
- print('Game Over in', guesscount,'steps')
- break
- if guesscount==7:
- guess=common[0]
- print("My guess is:",guess)
- if len(common)>1:
- common.pop(0)
- feedback=computeFeedback(code,guess)
- if feedback!='0w4b':
- combinations=sort_list([''.join(x) for x in product('ABCDEF',repeat=4)])
- overlap=list()
- for x in combinations:
- fb=computeFeedback(guess,x)
- overlap.append(x)
- if fb != feedback:
- overlap.pop()
- common=[token for token in overlap if token in common]
- overlap=list()
- else:
- print('Game Over in', guesscount,'steps')
- break
- else:
- print('Game Over in', guesscount,'steps')
- break
- if guesscount==8:
- print('Failure')
- class CodeBreaker:
- def __init__(self):
- def makeGuess(self):
- return guess
- def getFeedback(self, feedbackStr):
- from mastermind import CodeBreaker
- def computeFeedback(code,guess):
- # Given a code and guess computes the feedback string
- b = 0
- w = 0
- inCodeCount = {'A':0,'B':0,'C':0,'D':0, 'E':0, 'F':0}
- inGuessCount = {'A':0,'B':0,'C':0,'D':0, 'E':0, 'F':0}
- for i in range(0,4):
- if code[i] == guess [i]:
- b += 1
- inCodeCount[code[i]] += 1
- inGuessCount[guess[i]] += 1
- for ch in inCodeCount:
- w += min(inCodeCount [ch], inGuessCount [ch])
- w -= b
- feedback = str(w)+'w'+str(b)+'b'
- return feedback
- code = input()
- while (code != None):
- guesscount = 0
- myBreaker = CodeBreaker()
- while (guesscount < 8):
- guess = myBreaker.makeGuess()
- print("My guess is:",guess)
- guesscount += 1
- feedback = computeFeedback(code, guess)
- print(feedback)
- if feedback == "0w4b":
- print("Game Over in", guesscount,"steps")
- break
- myBreaker.getFeedback(feedback)
- if guesscount == 8:
- print("Failed to find the solution in 8 steps")
- code = input()
- class CodeBreaker:
- def __init__(self):
- self.guess_count = 0
- self.guess = 'ABCD'
- self.common = []
- def makeGuess(self):
- return self.guess
- def getFeedback(self, feedback):
- self.guess_count += 1
- if self.guess_count == 1:
- # ... your code here ...
- self.guess = 'BCDE'
- elif self.guess_count == 2:
- # ... your code here ...
- self.guess = 'CDEF'
- elif self.guess_count == 3:
- # ... your code here ...
- # ... and so on ...
- from itertools import product
- from random import choice
- from copy import copy
- class CodeBreaker(object):
- all_codes = [''.join(c) for c in product(*['ABCDEF'] * 4)]
- def __init__(self):
- self.codes = copy(self.all_codes)
- self.guess = 'AABB' # Best first guess!
- def makeGuess(self):
- return self.guess
- def getFeedback(self, feedback):
- self.codes = [c for c in self.codes if computeFeedback(c, self.guess) == feedback]
- self.guess = choice(self.codes)
- def getFeedback(self, feedback):
- self.codes = [c for c in self.codes if computeFeedback(c, self.guess) == feedback]
- def key(g): return max(Counter(computeFeedback(c, g) for c in self.codes).values())
- self.guess = min(self.codes, key = key)
- def getFeedback(self, feedback):
- self.codes = [c for c in self.codes if computeFeedback(c, self.guess) == feedback]
- if len(self.codes) == 1:
- self.guess = self.codes[0]
- else:
- def key(g): return max(Counter(computeFeedback(c, g) for c in self.codes).values())
- self.guess = min(self.all_codes, key = key)
- from collections import Counter
- def computeFeedback(code, guess):
- """
- Return the string `{white}w{black}b` where `black` is a count of the
- characters in `guess` that appear at the same position in `code`
- and `white` is a count of the characters in `guess` that appear at
- a different position in `code`.
- >>> computeFeedback('ABCD', 'ACAD')
- '1w2b'
- >>> computeFeedback('ABAB', 'AABB')
- '2w2b'
- >>> computeFeedback('ABCD', 'DCBA')
- '4w0b'
- """
- w = sum((Counter(code) & Counter(guess)).values())
- b = sum(c == g for c, g in zip(code, guess))
- return '{}w{}b'.format(w - b, b)
Add Comment
Please, Sign In to add comment