Streichhölzer-Logik

Hallo,

ich brauch die Hilfe von den erfahrenen www-Rätslern :smile:
Ich hab hier ein Streichholzspiel für zwei Spieler, das ich als Computer-Programm umsetzen soll. Allerdings steig ich hinter die mathematische Logik nicht so ganz. Ich versuch kurz das Spiel zu erklären:
Es gibt 16 Streichhölzer. Diese sind in vier Reihen (1,3,5,7) angeordnet:

I
III
IIIII
IIIIIII

Nun darf jeder Spieler abwechselnd soviele Hölzer einer Reihe nehmen wie er will, mindestens aber 1 Holz. Er kann auch eine ganze Reihe auf einmal nehmen. Er darf jedoch kein Holz einer zweiten Reihe ziehen. Wer das letzte Holz nehmen muß, hat verloren.

Ich kann mir hierzu nur „Bilder“ merken (verschiedene Kombinationsmöglichkeiten und sichere Züge), will aber eigentlich schon eine mathematische Logik zugrunde legen um nicht einen Code bis Alaska zu fabrizieren.

Für jede Hilfe oder Tip bin ich dankbar.
Daniel

(als „Belohnung“ gibt’s natürlich eine spezielle Version des fertigen Programmes :wink:

Das spiel geht ganz einfach: es gewinnt einfach immer der bessere,das ist natürlich der der das spiel kennt und damit mehr erfahrung hat oder eben mehr bilder kennt.
das geht soweit das er den spielausgang ab dem 1 entnommenen Streichholz zu seinen gunsten bestimmt.
der witz ist eben bei diesem spiel, das der gegner seine ganze anstrengung aufwendet um hinter das geheimnis zu kommen oder den trick zu erkennen. was aber nicht gelingt.
und der vorführende bei noch so starkem drängen, den trick nicht verraten kann und ganz gelassen erklärt, daß eben einfach der bessere gewinnt.
um ein computerprogramm auf zubauen braucht man also nur die stellungen einzuprogrammieren bei der der gegner keine chance mehr hat. ich glaub aber das das kein lustiges spiel wird,da ja eben der witz eben woanders liegt.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

PS ich glaub das die regel anders geht und zwar: entweder eines oder alle einer reihe

Nun darf jeder Spieler abwechselnd
soviele Hölzer einer Reihe nehmen wie er
will, mindestens aber 1 Holz.

(als „Belohnung“ gibt’s natürlich eine
spezielle Version des fertigen Programmes
:wink:

Das Spiel soll entsprechend den genannten Regeln programmiert werden, kann gut sein, das Du es anders kennst.
Ich will das Spiel mit ein bischen KI ausstatte. Wenn der Computer „merkt“, das der Gegner das Spiel gut beherrscht, wird er bessere Züge machen, ansonsten eben Halligalli-Sachen. Ansonsten ist das natürlich witzlos. Es soll auch kein großes Teil werden, sondern ist als Pausenfüller für eine Lernanwendung gedacht.
Anyway, eine mathematische Logik hab ich immer noch nicht…

Daniel

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Daniel !

Ich kenne das Spiel etwas anders, mit den gleichen Regeln aber wer das letzte
nehmen kann hat gewonnen.
In diesem Fall gibt es einen einfachen Algorithmus der immer zum Gewinn
führt (ausser man beginnt schon in einer schlechten Stellung und der Gegner
wendet denselben Algorithmus an).

mfg
Christof

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Streichhölzer-Logik = ‚SALAMI‘!
Hi Daniel!

Ich kenne das Spiel unter dem Namen „Salami“, weil es das auch als zu kaufende Plastikausführung gibt, wo man kleine Plastik-Salamischeiben (=Streichhölzer) auf Stangen verschiebt(=wegnimmt).

Es ist richtig, dass man möglichst viele „Bilder“ kennen muss. Nur wenn beide Spieler keine/kaum Bilder kennen, ist es wirklich ein taktisches Spiel.

Einige der „Bilder“ sind so erweiterbar, dass sie einem auch bei der Anfangskonstellation 1,3,27,29 oder sowas helfen, wenn man sie anwenden kann.

Ich behaupte, dass ich bei 1,3,5,7 gegen jeden gewinne, wenn ich NICHT anfangen muss.
Wer das bezweifelt, bitte an [email protected] mailen und wir spielen per Email.
(Ich meine die Variante, wer das letzte nehmen muss, hat VERLOREN.)
Wer Lust hat, kann auch 1,3,5,7,9,9,7,5,3,1 oder 1,1,2,2,3,3,4,4,5,5,6,6,7,7 oder 50,50 gegen mich spielen. Aber ich mache nicht den ersten Zug! (Wie arrogant…)

Falls Du alle (ALLE!) „Bilder“, die aus 1,3,5,7 entstehen können und zum Sieg führen, haben möchtest, bitte mail mir!

Ich habe das Spiel auch mal programmiert, und zwar in Borland Delphi 3. Ich habe kein einziges „Bild“ eingespeichert ausser 0,0,0,0=verloren, und der PC probiert sämtliche Möglichkeiten, die er gerade hat, bis zum Ende durch, um zu einer Entscheidung zu kommen. Das dauert bei vielen Streichhälzern ziemlich lange, weil die Methode nicht sehr effizient ist.
Falls Du das haben willst, mail mir.

Viel Spaß damit!

CU
Sven.

Binäre Streichhölzer-Logik
Hier eine Gewinnstrategie:

  1. Schreib die Zahlen der Streichhölzer jeder Zeile im Zweiersystem auf.
    Für die Ausgangskonfiguration also:
    1 = 001
    3 = 011
    5 = 101
    7 = 111

  2. Addiere spaltenweise (nicht binär)
    Für die Ausgangskonfiguration erhältst Du:
    224

  3. Wenn die Spielregel so ist, daß der, der das letzte Streichholz nimmt, gewonnen hat, dann musst Du immer versuchen, dem Gegner in jeder Spalte eine gerade Summe zu hinterlassen. Er erzeugt dann im nächsten Zug mindestens eine ungerade Spaltensumme, die Du wieder grade machen kannst.
    Und insbesondere Null ist eine gerade Zahl, die Du hier ja erreichen willst.
    Bei dieser Spielregel und der von Dir genannten Ausgangskonfiguration verliert der erste Spieler, wenn sein Gegner die Strategie kennt.

Ohne genauer darüber nachzudenken klingt das ganz gut. Allerdings hat das fatale Konsequenzen, wenn man das in der letzten Reihe auch noch so durchzieht.

Sven:
Deine Methode interessiert mich, auch wenn es immer noch nicht die gewünschte Logik ist. Wenn sie halbwegs verständlich ist, würd ich mich über den Code-Auszug freuen. Ich kann zwar kein Delphi, aber das kann nicht schwer sein :smile:

Ich dank Euch allen für Eure Beteiligung. Wenn jemand noch nen heißen Tip hat, freu ich mich.

Denne
Daniel

(Hat jetzt jemand Interesse an der fertigen Version? Wenn ja, einfach Mail an mich.)

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hier die echte Gewinnstrategie für die Spielregel, dass der, der die letzte
nimmt, gewinnt:

  1. Schreib die Zahlen der Streichhölzer
    jeder Zeile im Zweiersystem auf.
    Für die Ausgangskonfiguration also:
    1 = 001
    3 = 011
    5 = 101
    7 = 111

passt

  1. Addiere spaltenweise (nicht binär)
    Für die Ausgangskonfiguration erhältst
    Du:
    224

Korrektur: addiere jede Spalte für sich binär ! Das Ergebnis wäre hier 000

  1. Wenn die Spielregel so ist, daß der,
    der das letzte Streichholz nimmt,
    gewonnen hat, dann musst Du immer
    versuchen, dem Gegner in jeder Spalte
    eine gerade Summe zu hinterlassen. Er
    erzeugt dann im nächsten Zug mindestens
    eine ungerade Spaltensumme, die Du wieder
    grade machen kannst.
    Und insbesondere Null ist eine gerade
    Zahl, die Du hier ja erreichen willst.
    Bei dieser Spielregel und der von Dir
    genannten Ausgangskonfiguration verliert
    der erste Spieler, wenn sein Gegner die
    Strategie kennt.

Richtig, Du musst dem Gegner die Spaltensumme 0 nach dem obigen
Verfahren hinterlassen.
Dazu sucht man eine Reihe in der in der binären Schreibweise an der Stelle,
die in der Summe die höchste 1 ist, ebenfalls eine 1 ist und dreht jetzt
an den Stellen, an denen in der Summe eine 1
steht, das Bit um. An den Stellen,
an denen in der Summe ein 0 steht, lässt man das Bit wie es ist. Die nun erhaltene
Zahl ist die Anzahl, die nach meinem Zug dort sein soll.

Im angeführten Beispiel geht das nicht, weil die Summe bereits 000 ist, d.h. ich bin
in einer Verliererstellung und wenn der Gegner optimal spielt wird er sicher
gewinnen.
Deswegen ein Beispiel bei dem man mit einer Gewinnstellung beginnt:

Ausgangsst.:
1: 1=001
2: 3=011
3: 2=010
4: 4=100
5: 7=111

Sum.=011

Ich habe jetzt 3 Mögliche Züge, die alle zum Gewinn führen:
1.) Reihe 2: 011 -> 000 = alle drei wegnehmen
2.) Reihe 3: 010 -> 001 = eine wegnehmen
3.) Reihe 5: 111 -> 100 = drei wegnehmen

Bei jedem der drei Züge ist die Summe danach 000, also eine Verliererstellung.

Dass diese Methode immer zum Sieg führt (sofern man nicht in einer Verlierer-
stellung begonnen hat und der Gegner ebenfalls optimal spielt) lässt sich
graphentheoretisch beweisen.

mfg
Christof