Gestelltes Problem
Ursprünglich ging es um eine Wette mit einem Kumpel, wer wohl das bessere Programm für das Spiel Mastermind schreiben könne. Das Schwierige dabei war, dass der Computer die Kombination erraten musste. Ich habe fast zwei Wochen gebraucht, bis ich einen Algorithmus fand. Wer damals (1988) die Wette gewann wird nur per Mail verraten.
1997 habe ich dann das Programm in Java erneut geschrieben. Auch die Grafiken sind alle selbst gemacht.
Algorithmus
Ist eigentlich enttäuschend einfach. Es werden alle möglichen Kombinationen in einem Feld gespeichert. Die erste Kombination aus diesem Feld, im Screenshot (hier weiss, schwarz, blau, gelb) wird dem Benutzer angeboten. Dann gibt der Benutzer seine Bewertung (hier zwei weisse Stecker). Nun kommt der Trick. Das Programm nimmt jede Kombination aus dem Feld und prüft, welche Bewertung der Benutzer der eben angebotenen Kombination gegeben hätte, wenn es die Kombination des Benutzers wäre. Wenn der Benutzer also die Kombination (weiss, schwarz, blau, gelb) hätte, dann würde er für die angebotene Kombination (weiss, schwarz, blau, gelb) vier schwarze Stecker vergeben. Er vergab aber zwei weisse Stecker. Also wird diese Kombination gestrichen. Übrig bleiben die Kombinationen, die zusammen mit (weiss, schwarz, blau, gelb) zwei weisse Stecker ergeben. Jetzt wird die erste der übrigen Kombinationen (schwarz, weiss, grün, rot) angeboten. Nach maximal sechs Zügen ist die Kombination erraten.
Screenshot: