私はMasterMindのソルバーを書いています。推測と答えを取り、黒と白のペグの数の表現を返す必要があります.黒のペグは正しい場所の正しい色を表し、白いペグは正しい色を表します.間違った場所に。このコードを約 200 万回繰り返し実行する必要があるため、できるだけ高速にする必要があります。現在、これの最大の時間の浪費は分割とインデックスの呼び出しですが、それらを削除する方法がわかりません。機能を維持しながらこのコードをより速く実行する方法についてのアイデアはありますか?
def returnPegs(guess, answer):
guessList = guess.split(" ")
answerList = answer.split(" ")
response = ""
iterator = [0,1,2,3]
for i in iterator:
if answerList[i] == guessList[i]:
response = response + "B"
guessList[i] = "alsoNotAColor"
answerList[i] = "notAColor"
for j in iterator:
if guessList[j] in answerList:
response = response + "W"
answerList[answerList.index(guessList[j])] = "notAColor"
guessList[j] = "alsoNotAColor"
return response
明確にするため。私の入力は、スペースで区切られた 4 つの色の文字列です。出力は、黒と白のペグのすべての組み合わせに対して一意である限り、特定の形式である必要はありません。
かなりの最適化を行った後のコードの現在の状態は次のとおりです。
def returnPegs(guess, answer):
pegs = 0
for answerPeg, guessPeg in zip(answer, guess):
if answerPeg == guessPeg:
pegs += 5
elif guessPeg in answer:
pegs +=1
return pegs
さらに最適化して、元のコードに戻ると、このバージョンは実際にはすべての中で最速です。最初の約 4 倍、2 番目の約 2 倍です。
def returnPegs(guess, answer):
response = 0
iterator = [0,1,2,3]
for i in iterator:
if guess[i] == answer[i]:
response += 5
guess[i] = "alsoNotAColor"
answer[i] = "notAColor"
elif guess[i] in answer:
response += 1
answer[answer.index(guess[i])] = "notAColor"
guess[i] = "alsoNotAColor"
return response