我是一个初级程序员。
我一直在使用六猜算法的主脑求解器编写代码以进行分配。
(有关 mastermind 及其算法的更多信息:Mastermind on wiki)
我几天前就想通了。但是我们的教授设置了固定的模板,然后我不知道如何将我的代码转换成它。
下面是我的代码。可能很尴尬,但它有效,而且速度并不慢。
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()
我上课不好。我什至不知道init应该包含什么。任何人都可以帮忙吗?
非常感谢!