Problem:
Im Schach gibt es eine bekannte Regel, nach der durch Wiederholung gezogen wird. Wenn dieselbe Position 3 Mal (oder öfter) wiederholt wird, kann der Spieler, der beabsichtigt, den Zug auszuführen, der diese Wiederholung verursacht, ein Unentschieden fordern.
Manchmal ist dies eine leichte Aufgabe für einen Schiedsrichter, wenn die letzten Züge nur die Spieler sind, die sich vorwärts und rückwärts bewegen. Manchmal ist es weniger trivial, wenn sich Teile signifikant zwischen wiederholten Positionen bewegt haben.
Das Problem bei dieser Herausforderung besteht darin, einen Wahrheitswert auszugeben, wenn die beanspruchte Position durch Wiederholung gezogen wurde (wurde dreimal oder öfter gesehen), und einen Falschwert, wenn die beanspruchte Position nicht durch Wiederholung gezogen wurde, wenn eine Liste von Bewegungen in Koordinatenschreibweise gegeben ist wie unten beschrieben oder eine beliebige Notation Ihrer Wahl (aber Sie müssen die Testfälle konvertieren).
Was ist eine Position?
In einem realen Szenario würde die Position von Dingen beeinflusst, z. B. ob ein Spieler eine Burg errichten kann oder ob ein En-Passant möglich ist. Sie sollten diese in Ihrer Lösung des Problems nicht berücksichtigen. In diesem Problem wird eine Position einfach durch die Konfiguration der Teile auf der Tafel definiert. Für die Zwecke dieses Problems werden also zwei Positionen als gleich angesehen, wenn jedes Quadrat auf beiden Brettern von demselben Teil derselben Farbe besetzt ist. Dies muss nicht das exakte Stück sein, zum Beispiel könnten die weißen Ritter Quadrate tauschen und wenn alle anderen Stücke die Kriterien erfüllen, wäre dies immer noch die gleiche Position.
Wie sieht eine gültige Notation aus?
Obwohl ich weiter auf die Koordinaten-Notation eingehen werde, steht es Ihnen frei, Eingaben durch ein von Ihnen gewähltes Notationssystem vorzunehmen. Unter der Vorraussetzung, dass:
- Jedes Element in der Notation beschreibt eines oder alle der folgenden Elemente: die beteiligten Elemente; ob Scheck, Schachmatt, Doppelscheck, Schachmatt oder Patt geliefert wurden; wenn eine unbegleitete Gefangennahme stattgefunden hat; die Ausgangsposition; die endgültige Position.
- Möglicherweise enthält Ihre Notation keine Informationen zur Wiederholung.
Solange diese Kriterien erfüllt sind, akzeptiere ich gerne, solange Sie in Ihrer Antwort angeben, Ihr Notationssystem. Dies können zB 0 indizierte Zeilen-, Spaltentupel sein oder was auch immer für Ihr Programm sinnvoll ist.
Koordinatenschreibweise
Die Koordinatennotation ist eine Notation, die lediglich die Bewegungen als Koordinatensystem beschreibt.
Eine Bewegung wird als erste Koordinate aus dem Satz {A1-H8}
und dann als Zielkoordinate erneut aus demselben Satz beschrieben. So würde das Königsgambit aussehen (als Sammlung von Streichern)
{"E2-E4","E7-E5","F2-F4"}
Ich glaube, es ist die beste Schreibweise für dieses Problem, da es nicht mit irrelevanten Informationen übersät ist, z. B. ob eine Prüfung stattgefunden hat oder welche Art von Stück sich bewegt. Wie bereits erwähnt, kann die Notation von Ihnen gewählt werden, Sie können also eine andere Notation verwenden, z. B. eine algebraische Notation, oder Sie können diese Notation anpassen (z. B. die Bindestriche entfernen oder als Liste von Tupeln verwenden).
Regeln:
- Sie sollten nicht berücksichtigen, ob eine Position oder Bewegung gültig ist, sondern nur, ob sie Wiederholungen verursacht
- Sie können davon ausgehen, dass keine Rochade- und Bauernförderung stattfindet.
- Sie sollten eine Liste von Zeichenfolgen als Eingabe und Ausgabe eines Wahrheits- oder False-Werts verwenden, der davon abhängt, ob die dritte (oder mehrere) Wiederholungen im letzten Zug stattgefunden haben
- Das Spiel beginnt immer an der Standardstartposition für Schach. Die Ausgangsposition kann zur Wiederholung angerechnet werden.
- Ein Draw durch Wiederholung ist nicht aufgetreten, wenn die Position durch den letzten Zug nicht wiederholt wird
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln mit Standard-E / A-Regeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp, verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu (z. B. TIO ).
- Es wird außerdem dringend empfohlen, eine Erklärung für Ihre Antwort hinzuzufügen.
Testfälle
Sie sollten wahrheitsgemäße Werte zurückgeben für:
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8"}
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8"}
{"B1-C3","B8-C6","D2-D4","D7-D5","D1-D3","D8-D6","C3-B1","C6-B8","B1-C3","B8-C6","D3-D1","D6-D8","D1-D3","D8-D6"}
{"D2-D4","B8-C6","E2-E4","C6-D4","D1-E2","D4-E6","E2-F3","E6-D4","F3-D1","D4-C6","D1-E2","C6-D4","E1-D1","D4-C6","D1-E1","C6-D4"}
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","B1-C3"}
Und falsche Werte für:
{}
{"E2-E4","E7-E5","F2-F4"}
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","F2-F4","F7-F5"}
{"E2-E4","E7-E5","G1-F3","B8-C6","F1-C4","G8-F6","F3-G5","D7-D5","E4-D5","F6-D5","G5-F7"}
{"D2-D4","B8-C6","E2-E4","C6-D4","D1-E2","D4-C6","E2-D1","C6-D4","D1-E2","D4-C6","E2-D1"}
{"B1-C3","B8-C6","C3-B5","C6-B4","B5-D4","B4-D5","D4-C6","D5-C3","C6-B8","C3-B1","B8-C6","B1-C3","C6-B8","C3-B1"}
{"E2-E4","E7-E5","D1-E2","E8-E7","E1-D1","D8-E8","E2-E1","E7-D8","E1-E2","E8-E7","E2-E1","E7-E8"}
C6-B8
die Ausgangsposition dreimal aufgetreten.