Bei einer Eingabe von vier Ganzzahlen x 1 , y 1 , x 2 und y 2 wird ausgegeben, ob ein weißer König im Schach (mit Koordinaten ( x 1 , y 1 )) einen schwarzen Bauern (mit Koordinaten ( x 2 , y 1 ) fangen könnte 2 )) und fange es, wenn sich der Bauer bewegt, um so schnell wie möglich zu einer Dame aufzusteigen.
Die Koordinaten der Tafel lauten wie folgt:
first coordinate (x)
12345678
1 .#.#.#.#
2 #.#.#.#.
3 .#.#.#.#
second 4 #.#.#.#.
coordinate 5 .#.#.#.#
(y) 6 #.#.#.#.
7 .#.#.#.#
8 #.#.#.#.
Angenommen, es ist weiß, um sich zu bewegen (der König ist am Zug), und beide Spieler spielen optimal (der König bewegt sich so schnell wie möglich, um den Bauern zu fangen, und der Bauer bewegt sich so schnell wie möglich, um zu befördern). Die Eingabekoordinaten sind immer unterschiedlich, und der Bauer beginnt niemals mit einer y-Koordinate von 8.
Der König bewegt sich in jeder Runde um ein Feld in eine beliebige Richtung (er kann sich diagonal bewegen), und der Bauer kann sich nur ein Feld vorwärts bewegen (seine y-Koordinate verringern), es sei denn, er befindet sich an seiner Anfangsposition (mit unserem Koordinatensystem, y-Koordinate von) 7), in diesem Fall kann es sich um zwei Felder vorwärts bewegen.
Die Eingabe kann als durch Leerzeichen / Komma getrennte Zeichenfolge, ein Array von Zeichenfolgen / Ganzzahlen oder vier Funktions- / Befehlszeilen- / usw.-Argumente erfolgen. Die Koordinaten können in der Reihenfolge angegeben werden, die für Sie am bequemsten ist (also ist es in Ordnung, Eingaben wie [y 2 , y 1 , x 1 , y 2 ] zu akzeptieren , solange sie konsistent sind). Die Ausgabe muss ein wahrer oder falscher Wert sein .
Da es sich um Code-Golf , der kürzeste Code in Bytes gewinnt.
Wahrheitstestfälle :
5 3 3 2
6 1 1 7
3 3 3 2
4 1 4 7
7 7 1 7
1 8 1 7
Falsche Testfälle :
6 4 3 2
8 8 1 7
3 4 3 2
x1 y1 x2 y2
?1 8 1 7
, in dem der König zwei Felder ziehen kann, bevor der Bauer fängt. Ich denke, alle Antworten verstehen es jetzt falsch. Diese Situation macht das Problem sehr viel schwieriger.Antworten:
Gelee , 33 Bytes
Dieses Programm liest die Koordinaten
x2\nx1\ny2\ny1
ab STDIN. Probieren Sie es online!Nicht konkurrierende Version
Leider hatte der Jelly-Interpreter einen Fehler, als diese Frage gestellt wurde. Dieser Fehler verhinderte, dass mehr als zwei Befehlszeilenargumente akzeptiert wurden. Die neueste Version von Jelly kann die angegebene Aufgabe in 23 Bytes lösen .
Probieren Sie es online!
quelle
Python 2,
5340Der König hat Koordinaten
(x, y)
und den Bauern(p, q)
.Es gibt drei signifikante Fälle:
Der Bauer befindet sich auf Rang 7 und der König auf Rang 8. Um den Bauern zu erobern, muss sich der König in derselben oder einer benachbarten Akte befinden.
Ergebnis:
q = 7 ⋀ y = 8 → |x - p| ≤ 1
Der Bauer ist auf Rang 7. Um den Bauern zu erobern, muss sich der König innerhalb von sechs Akten befinden.
Ergebnis:
q = 7 → |x - p| ≤ 6
Der Bauer ist auf einem niedrigeren Rang. Um den Bauern zu erobern, muss der König in der Lage sein, das Aktionsfeld höchstens einen Zug nach dem Bauern zu erreichen.
Ergebnis:
q < 7 → |x - p| ≤ q ⋀ y - 1 ≤ q
Meine Lösung ist nur, diese Bedingungen herunterzuspielen. Hoffentlich gibt es diesmal keine Fehler.
quelle
abs
mitmax(y-1,x-p,p-x)
?f(1,8,1,7)
sein,True
dass der König den Bauern sofort fängt? Ich denke, es gibt eine Feinheit, bei der die Bauernreihe 7 nicht wie die Reihe 6 behandelt werden kann, wenn der König sofort fängt.or
und entfernen-2
.Prolog,
4842 BytesCode:
Beispiele:
Keine schlechte Herausforderung für Prolog im Vergleich zu den meisten anderen.
Bearbeiten: 6 Bytes durch Umschalten auf die in grcs Python 2-Antwort verwendete Formel gespeichert .
Leider kann Prolog Vergleiche nicht wie in Python verketten und die Ganzzahldivision ist 1 Byte länger als die Gleitkommadivision.
Probieren Sie es hier online aus
quelle
JavaScript (ES6), 52
Ich hoffe, Bytes ohne Math.abs, Math.min, Math.max gespeichert zu haben
Der Bauer in der siebten Reihe kann entkommen, indem er 2 Felder bewegt, wenn sich der König nicht in einer nahen Spalte befindet - deshalb wird geprüft,
d
bevor 7 durch 6 ersetzt wird.Testfall zur Ausführung in der Konsole:
Ergebnis:
[true, true, true, true, false, false, false]
quelle
Ruby, 50 Bytes
Argumente sind (König x, König y, Bauer x, Bauer y), alle ganzen Zahlen.
quelle