Hilfe!!!!!!mastermind programmieren in assembler unter pcspim

elninjo
Entwickeln von mastermind mit dem spim-simulator als ratender.

Es gibt 4 positionen(rot,gelb,grün,blau).Jede farbe kann auf jeder Position auftreten. Der Ratende muss eine vorgegebene Farb-Kombination erraten, indem er als Versuche Kombinationen vorschlägt, die vom Aufgabensteller bewertet werden. Die Bewertung erfolgt mit schwarzen und weißen Punkten nach dem Muster: schwarze Punkte = richtige Farbe auf richtiger Position, weiße Punkte= richtige Farbe auf falscher Position. Das Spiel ist also beendet, wenn eine Kombination mit 4 schwarzen Punkten bewertet wird.

Ein beispielhafter Programmablauf sollte also so aussehen:

Ausgabe: 1:rot 2:rot 3:rot 4:rot
Ausgabe: Schwarze:
Eingabe: 1
Ausgabe: Weiße:
Eingabe: 0
Ausgabe: 1:rot 2:gelb 3:gelb 4:gelb

...

Das Programm sollte in der Lage sein, in weniger als 10 Versuchen, jede beliebige Kombination zu erraten
Dicky Arts
Mal ganz blöd gefragt: Was ist ein Spim-Simulator? *unwissendbin*

Das größte Problem dürfte sein, diese Spiel ersteinmal selbt im realen Leben zu spielen.

Nachdem ich einen Moment darüber nachgedacht habe (ohne Gewähr!), fällt mir folgende Lösung ein: In der Stochastik gibt's eine Formel, mit der sich die Anzahl der Kombinationen (Variationen?) von 4 Ziehungen aus 4 Elementen mit erlaubten Wiederholungen berechnen läßt. Ich habe die Formel zwar gerade nicht parat, aber in Deinem Mathebuch steht sie bestimmt drin. (Ich glaube 4 hoch 4 - aber prüf's sicherheitshalber nach!) Man muß sich jetzt quasi ein System überlegen, mit dem man zunächst 4 beliebige Farben setzt. Sobald man die Reaktion (schwarz/weiß/nix) kennt, geht man die Liste aller Variationen durch und prüft, welche Möglichkeiten überhaupt nur in Frage kommen. Bei allen anderen könnte man beispielsweise ein Flag setzen, daß sie Unsinn sind.
Dann wählt man eine vollkommen andere Variation und prüft nur bei den verbleibenden Variationen, welche immer noch in Frage kommen. Die Schwierigkeit dürfte also daran bestehen, ein möglichst allgemeines Rotationsprinzip, das alle Variationen möglichst geschickt abprüft.
Beispielsweise könnte per Zufallsgenerator eine der verbleibenden Variationen auswählen...

Vielleicht liege ich auch völlig daneben, aber so könnte es gehen.
Wie man das später in Quellcode gießt, ist vermutlich Geschmackssache. Das einfachste wäre es wahrscheinlich, einige riesige Arrays aufzubauen und dort die Variationen vorzuberechnen. Bei den vor mir vermuteten 4 hoch 4 (=256) Variationen wären die Arrays ja noch recht überschaubar.
Minimalisten werden vermutlich nur ein Array für die Flags haben und die Variationen dann bei jedem Durchlauf neu berechnen. Das spart zwar Speicher, ist aber möglicherweise ein Mikrosekunde langsamer.

Viel Erfolg beim coden ;-)

Gruß

Thomas