16.15. Master Mind
Description
The Game of Master Mind is played as follows:
The computer has four slots, and each slot will contain a ball that is red (R). yellow (Y). green (G) or blue (B). For example, the computer might have RGGB (Slot #1 is red, Slots #2 and #3 are green, Slot #4 is blue).
You, the user, are trying to guess the solution. You might, for example, guess YRGB.
When you guess the correct color for the correct slot, you get a "hit:' If you guess a color that exists but is in the wrong slot, you get a "pseudo-hit:' Note that a slot that is a hit can never count as a pseudo-hit.
For example, if the actual solution is RGBY and you guess GGRR, you have one hit and one pseudo-hit. Write a method that, given a guess and a solution, returns the number of hits and pseudo-hits.
Given a sequence of colors solution, and a guess, write a method that return the number of hits and pseudo-hit answer, where answer[0] is the number of hits and answer[1] is the number of pseudo-hit.
Example:
Input: solution="RGBY",guess="GGRR" Output: [1,1] Explanation: hit once, pseudo-hit once.
Note:
len(solution) = len(guess) = 4- There are only
"R","G","B","Y"insolutionandguess.
Solutions
Solution 1: Hash Table
Thinking
Hits are right color and slot; pseudo-hits are right color only. Four positions need no heavier matching.
Hits \(x\) are pairwise equals; pseudo-hits are the sum of per-color mins minus \(x\).
zip counts \(x\); the Counter intersection is the color overlap \(y\); return \([x,y-x]\). The alphabet has size \(4\).
We simultaneously traverse both strings, count the number of corresponding characters that are the same, and accumulate them in \(x\). Then we record the characters and their frequencies in both strings in hash tables \(cnt1\) and \(cnt2\), respectively.
Next, we traverse both hash tables, count the number of common characters, and accumulate them in \(y\). The answer is then \([x, y - x]\).
The time complexity is \(O(C)\), and the space complexity is \(O(C)\). Here, \(C=4\) for this problem.
1 2 3 4 5 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | |