Ihr Ziel ist es, ein Programm zu schreiben, das jedes Mastermind-Puzzle in 6 oder weniger Zügen löst.
Hintergrund
Mastermind ist ein Brettspiel. Das Ziel des Spiels ist es, die Kombination (Farben und Reihenfolge) von 4 farbigen Stiften, die der andere Spieler verbirgt, genau zu erraten. Wenn eine Vermutung vorliegt, antwortet der andere Spieler mit 0 bis 4 weißen und / oder roten Stiften. Bei einem roten Stift stimmen Farbe und Position. Bei einem weißen Stift ist die Farbe in den übrigen Stücken dargestellt, befindet sich jedoch an der falschen Stelle. Wenn die Vermutung doppelte Farben enthält, wird im Geheimnis nur ein Stift pro entsprechender Farbe vergeben. (Also - wenn das Geheimnis 1 Blau enthielte und die Vermutung 2 Blues mit einem an der richtigen Stelle hatte, würde ein roter Stift gegeben werden). Es gibt 6 verschiedene Farben und Duplikate können verwendet werden.
So könnte ein Spiel beispielsweise wie folgt ablaufen: (Angenommen, die Lösung lautet Rot Grün Grün Blau.)
1: Blue Purple Black Green - 2 white pegs
2: Green Red Black Blue - 2 white pegs, 1 red peg
3: Green Green Green Blue - 3 red pegs
4: Red Green Green Blue - 4 red pegs
Die Regeln werden auf Wikipedia erweitert
Bedarf
- Das Programm muss von stdin lesen und nach stdout schreiben
- Ich werde der Einfachheit halber Zahlen anstelle von Farben verwenden. Die zu erratende Kombination besteht aus 4 Zahlen zwischen 1 und 6
Sie müssen ihre Vermutungen als eine Reihe von 4 durch Leerzeichen getrennten Zahlen von 1 bis 6 ausgeben, die mit einem Zeilenumbruch abschließen. Zum Beispiel:
1 5 2 2 \ n
Das Programm erhält anschließend als Eingabe 2 ganze Zahlen zwischen 0 und 4, die durch ein Leerzeichen getrennt sind und mit einer neuen Zeile abschließen. Das erste ist die Anzahl der weißen Stifte, das zweite die Anzahl der roten Stifte.
- Bei einer Eingabe von "0 4" (4 rote Stifte) muss das Programm beendet werden
- Das Programm muss in der Lage sein, jedes Rätsel in weniger als 6 Runden zu lösen (Ihr Programm gibt eine Ausgabe aus, gefolgt von einer Antworteingabe von 1 Runde). Es gibt keinen Bonus (aufgrund der Komplexität der Beweise), wenn Sie es in weniger lösen können.
- Die Lösung muss vollständig intern sein und in der Quelle enthalten sein. Es sind nur Standardbibliotheken zulässig. Die Lösung ist daher möglicherweise nicht auf andere Dateien (z. B. Wörterbücher) oder das Internet angewiesen.
Beispiel Eingabe / Ausgabe
> is your programs output
< is the responding input
Solution is 1 5 6 6
> 1 2 3 4
< 0 1
> 4 1 6 6
< 1 2
> 1 6 5 6
< 2 2
> 1 5 6 6
< 0 4
Wertung
- Das ist schlicht und einfach Code Golf . Die kürzeste Lösung in Bytes gewinnt.
Dies ist meine erste Code Golf Frage. Ich entschuldige mich, wenn ich etwas falsch gemacht habe, aber ich habe versucht, so gut wie möglich sicherzustellen, dass es absolut keine Unklarheiten gibt, und verhindert, dass so viele Regeln wie möglich erlassen werden. Wenn ich mehrdeutig oder unklar war, können Sie gerne Fragen stellen.
1 2 3 4zurückkehren0 1?