Es ist das Ende eines weiteren gut gespielten Schachspiels. Du bist der weiße Spieler, und du hast immer noch einen Turm und deinen König. Dein Gegner hat nur noch seinen König übrig.
Da du weiß bist, bist du dran. Erstellen Sie ein Programm, um dieses Schachspiel zu spielen. Die Ausgabe kann eine Folge von Zügen sein, eine GIF-Animation, ASCII-Grafiken oder was auch immer Sie möchten.
Es scheint ganz offensichtlich, aber ich sage es ausdrücklich: Sie müssen das Spiel gewinnen (in einer begrenzten Anzahl von Zügen). Es ist immer möglich, von dieser Position aus zu gewinnen. VERLIERE DIESEN ROOK NICHT. NICHT EINSTELLEN.
Ihr Programm akzeptiert möglicherweise eine menschliche Eingabe für die Startposition und für jede schwarze Bewegung (Sie können sicher annehmen, dass dies eine legale Position ist, dh die Könige berühren sich nicht). Ist dies nicht der Fall, genügen eine zufällige Startposition und zufällige Bewegungen für den schwarzen König.
Ergebnis
Ihre Punktzahl ergibt sich aus der Länge Ihres Codes + Bonus in Byte. Jede Sprache ist erlaubt, die niedrigste Punktzahl gewinnt.
Bonus
-50, wenn Ihr Programm sowohl eine vom Menschen definierte als auch eine zufällige Startposition zulässt. Menschen können es über stdin, Datei, GUI eingeben ...
-100, wenn Ihr Programm es sowohl einem Menschen als auch einem zufälligen Spieler erlaubt, den schwarzen König zu bewegen
+12345, wenn Sie sich auf einen externen Schachlöser oder eine integrierte Schachbibliothek verlassen
Viel Glück!
Aktualisieren!
Extra Regel: Das Match muss bis zum Schachmatt gespielt werden. Schwarz tritt nicht zurück, springt nicht aus dem Schachbrett und wird nicht von Außerirdischen entführt.
Hinweis
Sie können wahrscheinlich Hilfe von dieser Frage auf chess.se bekommen .
Antworten:
Haskell 1463-100 = 1363
Ich bekomme nur eine Antwort. Dies findet die Lösung auf retrograde Weise und arbeitet vom Schachmatt zur Position zurück, in der wir uns befinden. Es unterscheidet sich von der Beschreibung der retrograden Analyse beim Schachprogrammieren - anstatt mit einer ersten Menge zu beginnen und sie mit Rückwärtsbewegungen zu erweitern Solange sich keine Quadrate bewegt haben, um nicht gesehen zu werden, beginnt es mit allen nicht verwendeten Quadraten und reduziert diese Menge, indem es Vorwärtsbewegungen versucht. Dies wird weniger zeiteffizient sein als die herkömmliche Methode, aber die Speichernutzung ist für mich explodiert, als ich es ausprobiert habe.
Kompilieren Sie mit
ghc -O2
für eine akzeptable Leistung für die Berechnung der Endspieltabelle. Das Spiel beginnt sofort nach dem ersten Zug. Liefern Sie weiße Königs-, Turm- und schwarze Königsfelder als Argumente. Für einen Zug möchte es nur ein Quadrat und wählt eines für Sie aus, wenn Sie die Eingabetaste drücken. Beispielsitzung:Code:
Bearbeitet: Ein Fehler wurde behoben, durch den sich der Code an die Endspieltabelle erinnert und Argumente verwendet wurden, sodass das wiederholte Testen weniger schmerzhaft war.
quelle
y
). Dies ist wirklich offensichtlich, da der zweite Zug nicht schnell ist, wenn wir bereits über das gesamte Endspiel nachgedacht haben. Ich bin heute Abend in der Kneipe, aber wenn ich morgen die Chance bekomme, werde ich das weniger schrecklich machen.C, Derzeit 2552 noncomment nonwhitespace Zeichen
Die Zählung zeigt mir, dass ich unter 2552 Zeichen Golf spielen könnte, aber da es bereits eine kleinere Antwort gibt (die schwer zu schlagen sein wird), werde ich dies sorgfältig prüfen, bevor ich mir die Mühe mache, es zu tun. Es ist wahr, es gibt ungefähr 200 Zeichen für die Anzeige der Tafel und jeweils weitere 200 für die Überprüfung der Benutzereingaben von Startposition und Bewegung (was ich zum Testen brauche, aber beseitigen könnte.)
Hier gibt es keinen Spielbaum, nur einen fest codierten Algorithmus, sodass er sich sofort bewegt.
Startpositionen werden als Reihe (1-8), Spalte (1-8) von rechts oben nummeriert eingegeben und das Programm arbeitet nach demselben Schema. Wenn Sie Ihren Bildschirm also um 90 Grad gegen den Uhrzeigersinn drehen, folgt er der standardmäßigen numerischen Quadratnotation für Korrespondenzschach. Positionen, bei denen der schwarze König bereits in Schach ist, werden als illegal zurückgewiesen.
Schwarze Züge werden als Zahl von 0 bis 7 eingegeben, wobei 0 ein Zug nach Norden, 1 nach Nordosten usw. im Uhrzeigersinn ist.
Es folgt nicht dem allgemein bekannten Algorithmus, der ausschließlich den Turm unter dem Schutz des weißen Königs verwendet, um den schwarzen König einzuschränken. Der Turm schränkt den schwarzen König nur in vertikaler Richtung ein (und rennt horizontal davon, wenn er verfolgt wird). Der weiße König schränkt den schwarzen König in horizontaler Richtung ein. Dies bedeutet, dass sich die beiden weißen Teile nicht gegenseitig behindern.
Ich habe die meisten Bugs und möglichen Endlosschleifen ausgebügelt, es läuft jetzt ziemlich gut. Ich werde morgen wieder damit spielen und sehen, ob es noch etwas gibt, das repariert werden muss.
Hier ist ein typisches Finish (Mate kann manchmal irgendwo am rechten oder linken Rand des Bretts auftreten.)
quelle
Bash, 18 (oder -32?)
Okay, das ist eine Scherzantwort. Da Schwarz ein guter Schachspieler ist und Schwarz weiß, dass Weiß auch ein guter Schachspieler ist, entscheidet er, dass das einzig Vernünftige ist:
Dies führt zu einem Weißgewinn, der der Spezifikation entspricht.
Technisch gesehen können Sie die aktuellen Positionen auch als Argumente eingeben, das Programm ignoriert sie einfach. Dies kann sich also möglicherweise für den Bonus von -50 qualifizieren.
quelle
1-0
etwas kürzere Ausgaben machen .