843. Guess the Word
Description
You are given an array of unique strings words
where words[i]
is six letters long. One word of words
was chosen as a secret word.
You are also given the helper object Master
. You may call Master.guess(word)
where word
is a six-letter-long string, and it must be from words
. Master.guess(word)
returns:
-1
ifword
is not fromwords
, or- an integer representing the number of exact matches (value and position) of your guess to the secret word.
There is a parameter allowedGuesses
for each test case where allowedGuesses
is the maximum number of times you can call Master.guess(word)
.
For each test case, you should call Master.guess
with the secret word without exceeding the maximum number of allowed guesses. You will get:
"Either you took too many guesses, or you did not find the secret word."
if you calledMaster.guess
more thanallowedGuesses
times or if you did not callMaster.guess
with the secret word, or"You guessed the secret word correctly."
if you calledMaster.guess
with the secret word with the number of calls toMaster.guess
less than or equal toallowedGuesses
.
The test cases are generated such that you can guess the secret word with a reasonable strategy (other than using the bruteforce method).
Example 1:
Input: secret = "acckzz", words = ["acckzz","ccbazz","eiowzz","abcczz"], allowedGuesses = 10 Output: You guessed the secret word correctly. Explanation: master.guess("aaaaaa") returns -1, because "aaaaaa" is not in wordlist. master.guess("acckzz") returns 6, because "acckzz" is secret and has all 6 matches. master.guess("ccbazz") returns 3, because "ccbazz" has 3 matches. master.guess("eiowzz") returns 2, because "eiowzz" has 2 matches. master.guess("abcczz") returns 4, because "abcczz" has 4 matches. We made 5 calls to master.guess, and one of them was the secret, so we pass the test case.
Example 2:
Input: secret = "hamada", words = ["hamada","khaled"], allowedGuesses = 10 Output: You guessed the secret word correctly. Explanation: Since there are two words, you can guess both.
Constraints:
1 <= words.length <= 100
words[i].length == 6
words[i]
consist of lowercase English letters.- All the strings of
wordlist
are unique. secret
exists inwords
.10 <= allowedGuesses <= 30
Solution
# """
# This is Master's API interface.
# You should not implement it, or speculate about its implementation
# """
# class Master:
# def guess(self, word: str) -> int:
class Solution:
def findSecretWord(self, words: List[str], master: 'Master') -> None:
def similarity(A, B):
count = 0
for a, b in zip(A, B):
if a == b:
count += 1
return count
i = matches = 0
while i < 10 and matches != 6:
guess = words[randint(0, len(words) - 1)]
temp = []
matches = master.guess(guess)
for word in words:
if similarity(word, guess) == matches:
temp.append(word)
words = temp
i += 1