(newRPL) Mastermind solver
08-26-2023, 03:22 PM (This post was last modified: 09-02-2023 12:54 PM by Gilles.)
Post: #1
 Gilles Member Posts: 225 Joined: Oct 2014
(newRPL) Mastermind solver
This small program plays the role of the decoder in the classic Mastermind game (4 holes, 6 colors). It uses newRPL LstX library v1.01d
Code:
DIRECTORY 'Init' « 1 6 LSEQR 4 NDUPN →LIST LCPRD 'Pool' STO 0 'Try' STO Guess » 'Guess'   « IF Try TYPE 62 == THEN       DUP  { 'GP' 'WP' } STO       Pool       « IF DUP Try == ΣLIST GP == THEN           IF Try SWAP LINCL SIZE GP - WP == THEN 1 ELSE 0 END        ELSE DROP 0 END      » LFILT 'Pool' STO    END    Pool DUP SIZE RAND * 1 + IP GET DUP 'Try' STO   » ENDDIR

To use it:
- Think of a combination (a combination of 4 digits, with numbers from 1 to 6, for example 4524)
- Press 'Init', a combination proposal is made by the calculator
- Enter according to the rule of the Mastermind the number of correctly placed digits and fine but misplaced digits in the form of a list { well placed, misplaced }
- Press Guess, a new guess is made, answer as in the previous point then 'Guess' etc until the solution is found.

About the algorithm: The algorithm is simple:
- Init generates all the possible combinations (Cartesian product: 1296 possibilities) and stores them as a list in the "Pool" variable. It offers a first random proposal.
- At each game turn, the program deletes in 'Pool' all the impossible solutions (this replays the last attempt and checks that the answer is correct), and chooses a new random proposal from the update 'Pool' list
- We start all over again with new guess until the prg found the solution

That's all ;D Very simple but very effective!
Nota : It could be easily adapted for stock RPL and ListExt library
 « Next Oldest | Next Newest »

User(s) browsing this thread: 1 Guest(s)