Schachfiguren (Könige, Königinnen, Türme, Bischöfe und Ritter) und Bauern befinden sich auf einem Brett, jedoch nicht auf dem Feld a1 oder h8 . Deine Aufgabe ist es, von den leeren Feldern a1 zu den leeren Feldern h8 zu gelangen und dabei nur leere Felder zu durchqueren. Die Bewegungsregeln sind wie folgt:
- Sie können von einem beliebigen leeren Feld zu einem beliebigen leeren Feld daneben gehen (gleicher Rang, nächste oder vorherige Datei; oder gleiche Datei, nächster oder vorherige Rang).
- Sie können von einem beliebigen leeren Feld zu einem beliebigen leeren Feld diagonal daneben gehen (nächster oder vorhergehender Rang, nächste oder vorhergehende Datei), vorausgesetzt , die Catty-Corner-Felder enthalten entweder (a) zwei Bauern oder (b) Bauern / gegnerische Steine Farbe. (Zwei nicht bäuerliche Figuren oder eine nicht bäuerliche Figur und eine bäuerliche Figur derselben Farbe sind stark genug, um den Fortschritt über die Ecke zu verhindern, aber zwei Bauern sind es nicht; und Figuren mit entgegengesetzter Farbe funktionieren nicht.) Konzert, um dir den Weg zu versperren.) Zum Beispiel, wenn du auf bist c4 sind und d5 leer ist, können Sie damit fortfahren, vorausgesetzt, c5 und d4 enthalten Bauern oder Teile / Bauern mit entgegengesetzter Farbe. Im Abschnitt "Beispieldiagonalen" unten finden Sie Abbildungen.
Eingang
FEN Board Beschreibung. Das heißt: Die Eingabe ist eine Zeichenfolge, die eine Beschreibung von Rang 8 , einen Schrägstrich ( /
), eine Beschreibung von Rang 7 , einen Schrägstrich, ... und eine Beschreibung von Rang 1 enthält . Die Beschreibung jedes Ranges umfasst Zahlen und Buchstaben von Datei a bis Datei h , wobei die Buchstaben Teile und Bauern bezeichnen (die schwarzen sind)p
= Bauer, n
= Ritter, b
= Bischof, r
= Turm, q
= Dame, k
= König und die weißen Einsen sind großgeschriebene Versionen desselben) und die Zahlen geben die aufeinanderfolgende Anzahl leerer Quadrate an. Zum Beispiel rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBN
ist das Brett nach einem Lagenzug (Königspfand auf e4)) in einem Schachspiel.
a1 und h8 sind in der Eingabe leer; dh der erste Schrägstrich hat eine Ziffer vor sich und der letzte Schrägstrich hat eine Ziffer nach sich.
Ausgabe
Wahrheit oder Falschheit, die angibt, ob eine erfolgreiche Passage nach h8 möglich ist.
Wenn der Eingang keine gültige FEN-Board-Beschreibung ist (dh eine, die meiner obigen Erklärung entspricht) oder wenn a1 oder h8 belegt ist, kann der Ausgang alles oder nichts sein. (Mit anderen Worten: Sie können davon ausgehen, dass die Eingabe die oben genannten Anforderungen erfüllt.)
Wertung
Das ist Code Golf: Wenigste Bytes gewinnen.
Beispiel für Ein- und Ausgabe
Beachten Sie, dass Ihr Code für alle gültigen Eingaben funktionieren muss, nicht nur für die Beispiele.
Fügen Sie w
nach jeder FEN ein Leerzeichen und ein hinzu , um es bei zu visualisieren http://www.dhtmlgoodies.com/scripts/chess-fen/chess-fen-3.html
. (Beachten Sie, dass einige andere Online-FEN-Visualisierer keine im Schach illegalen Bretter zulassen, z. B. mit einem Bauern auf Rang 1 oder 8 , und daher nicht für unsere Zwecke verwendet werden können.)
Wahrheitsbeispiele
8/8/8/8/8/8/8/8
- das leere Brett1p1Q4/2p1Q3/2p1Q3/2p1Q3/2p1Q3/2p1Q3/Q1p1Q3/1q3q2
- Es gibt einen Pfad a1 , b2 , b3 , b4 , b5 , b6 , b7 , c8 , d7 ( nicht e8 , der blockiert ist, aber) d6 , d5 , d4 , d3 , d2 , d1 , e1 , f2 , f3 , f4 , f5 , f6 , f7 , f8 , g8 , h88/8/KKKKK3/K3K3/K1K1p3/Kp1K4/K1KK4/2KK4
- Ein Beispiel, bei dem ein an einer Stelle blockiertes Quadrat später durchlaufen werden muss (um sicherzustellen, dass Sie keine Quadrate als unpassierbar festlegen).K1k1K1K1/1K1k1K1k/K1K1k1K1/1k1K1K1k/K1k1K1k1/1K1k1k1K/K1K1k1K1/1k1k1K1k
- Es gibt einen einzigen Weg (folgen Sie einfach Ihrer Nase: Es gibt nur ein Feld, zu dem Sie sich bei jedem Schritt bewegen können, es sei denn, Sie machen einen Schritt zurück). Dies ist auch ein Beispiel, bei dem ein Quadrat an einer Stelle blockiert ist, aber später benötigt wird
Falsche Beispiele
6Q1/5N2/4Q3/3N4/2Q5/1N6/2Q5/1N6
- Jeder Wegeversuch muss durch zwei diagonal angeordnete gleichfarbige Teile verlaufenN1q1K1P1/1R1b1p1n/r1B1B1Q1/1p1Q1p1b/B1P1R1N1/1B1P1Q1R/k1k1K1q1/1K1R1P1r
- Der einzige Weg durch die Diagonale a8-h1 ist bei f2-g3 , aber das würde den Durchgang durch e1-d2 oder f2-e3 erfordern , die beide unmöglich sind.4Q3/4q3/4Q3/5Q2/6Q1/3QqP2/2Q5/1Q6
4q3/4Q3/4q3/5q2/6q1/3qQp2/2q5/1q6
Beispieldiagonalen
Für den Fall, dass die obige Prosa unklar war, hier einige Bilder.
Passable Diagonalen
Unüberwindliche Diagonalen
Antworten:
VBA
668666633622548510489435331322319315 BytesDas Lesen der Eingabezeichenfolge belegt bis zu 'Wend'. Ein netter Nebeneffekt: Sobald das Board [X] vollständig codiert ist, wird der Eingabe-String aufgegeben, sodass Sie am Ende eine Beschreibung hinterlassen können.
In der Boardcodierung sind die Bauern 2, die anderen 3, Schwarz ist negativ. Bauern werden durch 'P' & 'p' mit durch 8 teilbaren Zeichencodes erkannt.
'X (7,0) = 1', Einstellung a1 zugänglich, beginnen die Pfadprüfungen. Das Board wird wiederholt gescannt, wobei versucht wird, zugängliche Felder aus den bisher als zugänglich (1) markierten Feldern hinzuzufügen. Diagonaler Zugriff und Belegung werden in einem IF + -Logic-Calc überprüft, der früher in einer Funktion lebte, jetzt aber in verschachtelten Nachbarschleifen sitzt. Die diagonale Zugangskontrolle basiert auf dem Produkt der beiden Kitty-Eckquadrate, das nur bei 6 oder mehr Stücken dieselbe Farbe hat und bei mindestens einem Stück kein Bauer ist.
Tabellenkalkulation aufrufen; Gibt den Wert in X (0,7) - 1 zurück, wenn auf h8 zugegriffen werden kann, und 0, wenn nicht -, den Excel als wahr / falsch erkennt. = WENN (Z (C2), "ja", "nein")
Ich habe mich vielleicht von der Arbeit mit dem Code hinreißen lassen, also ist hier eine kommentierte halb-ungolfed Version:
Fortschrittsaufzeichungen
Edit 1: Der Code ist jetzt nicht mehr als 666-teuflisch :-D und hat seine Funktionen verloren; Ich fand einen kurzen Weg, sie zu schreiben, um den Overhead zu vermeiden.
Edit 2: Ein weiterer großer Sprung nach vorne, der die Arbeit des Entfernens der Inc / Dec-Funktionen, des Seufzens und der Verwendung einiger Globals effektiv beendet. Ich könnte endlich den Dreh raus bekommen ...
Die Codierung von Teilen und Quadraten wurde geändert. Keine Auswirkung auf die Codelänge.
Bearbeiten 3: Rückkehr von (gefälschten) Funktionen, Entfernen all dieser lästigen
Call
Bytes und einiger anderer Verbesserungen.Bearbeiten 4: Durchbrechen der großen 500, woohoo - die 3 For-Schleifen in 1 geglättet.
Bearbeiten 5: Jiminy Cricket, ein weiterer großer Tropfen, als ich die beiden Funktionen zusammengeschmissen habe - meine diagonale Zugriffskontrolle gilt immer für benachbarte Felder, also ...
Bearbeiten 6: Heilige Knabbereien, ein weiterer massiver Tropfen. Auf Wiedersehen zu externen Funktionen und damit zu Globals ... Ich bin auf weniger als die Hälfte der ursprünglich geposteten Länge gegangen ....
Bearbeiten 7: Ungolfed Version hinzufügen
Bearbeiten 8: Der Lesevorgang wurde für ein paar Dollar mehr überarbeitet
Bearbeiten 9: Drückte ein paar Ausdrücke für die letzten Blutstropfen
Edit 10: Compund
Next
Anweisung wirft einige Bytes abBei Interesse sind Grafiken der Tafeln nach der Zugänglichkeitsanalyse (die Codenummern sind veraltet, aber ...) zugängliche Quadrate grün, nicht zugängliche Quadrate weiß und andere Farben sind Teile oder Bauern.
Ein paar Challenge Boards: h8 in beiden :
quelle
If V>9 Then X(7-P,C)=
würde ich denken (nicht dass ich VBA kenne) werdenIf V>9 Then X(P,C)=
.[some non-letter character] To
to[some non-letter character]To
Matlab, 636
887Bytes wie gespeichert (einschließlich Einrückung)Diese Lösung ist nicht sonderlich gut, aber ich wollte weitermachen und sie aufstellen.
Liest eine Board-Zeichenfolge
x
wie oben angegeben und wandelt sie in die vollständigere Darstellung umo
, findet dann alle Bewegungen (Diagrammkanten) zwischen Leerzeichen und stellt dann fest, welche Bewegungen möglich sind (nicht in gefüllte Leerzeichen), und stellt dann fest, welche möglichen Bewegungen " Tore "aus zwei Teilen, zwischen denen man hindurchgehen kann, und dann herausfindet, ob das Tor offen (Bauern, gegenüberliegende Farben) oder geschlossen (gleiche Farbe und mit einem Nichtbauern) ist. Dann sucht es nach Orten, die über Pfade vom unteren linken Quadrat aus erreichbar sind. Wenn ein Pfad Platz 64 erreichen kann, handelt es sich um eine Ja-Tafel.quelle
=
s fallen lassen? (Ich weiß nicht, MATLAB: Vielleicht sind die unmöglich.)