Étant donné une entrée de quatre entiers x 1 , y 1 , x 2 et y 2 , indiquez si un roi blanc aux échecs (avec les coordonnées ( x 1 , y 1 )) pourrait attraper un pion noir (avec les coordonnées ( x 2 , y 2 )) et capturez-le si le pion se déplace pour devenir une reine le plus rapidement possible.
Les coordonnées du conseil sont les suivantes:
first coordinate (x)
12345678
1 .#.#.#.#
2 #.#.#.#.
3 .#.#.#.#
second 4 #.#.#.#.
coordinate 5 .#.#.#.#
(y) 6 #.#.#.#.
7 .#.#.#.#
8 #.#.#.#.
Supposons qu'il soit blanc pour se déplacer (le tour du roi) et que les deux joueurs jouent de manière optimale (le roi se déplacera aussi vite que possible pour attraper le pion, et le pion se déplacera aussi vite que possible pour se promouvoir). Les coordonnées d'entrée seront toujours distinctes et le pion ne commencera jamais par une coordonnée y de 8.
Le roi se déplace d'un carré dans n'importe quelle direction à chaque tour (il peut se déplacer en diagonale), et le pion ne peut avancer que d'un espace vers l'avant (diminuer sa coordonnée y), à moins qu'il ne soit à sa position initiale (avec notre système de coordonnées, coordonnée y de 7), auquel cas il peut avancer de deux espaces.
L'entrée peut être donnée sous la forme d'une chaîne séparée par des espaces / virgules, un tableau de chaînes / entiers ou quatre arguments de fonction / ligne de commande / etc. Les coordonnées peuvent être données dans l'ordre qui convient le mieux / golfy (donc, accepter l'entrée comme [y 2 , y 1 , x 1 , y 2 ] est acceptable tant qu'elle est cohérente). La sortie doit être une valeur véridique ou fausse .
Puisqu'il s'agit de code-golf , le code le plus court en octets l'emporte.
Cas de test véridiques :
5 3 3 2
6 1 1 7
3 3 3 2
4 1 4 7
7 7 1 7
1 8 1 7
Cas de test de falsification :
6 4 3 2
8 8 1 7
3 4 3 2
x1 y1 x2 y2
?1 8 1 7
, où le roi capture avant que le pion ne puisse déplacer deux espaces. Je pense que toutes les réponses se trompent maintenant. Cette situation rend le problème beaucoup plus difficile.Réponses:
Gelée , 33 octets
Ce programme lit les coordonnées à
x2\nx1\ny2\ny1
partir de STDIN. Essayez-le en ligne!Version non concurrente
Malheureusement, l'interprète Jelly a eu un bug lorsque cette question a été publiée. Ce bug l'a empêché d'accepter plus de deux arguments de ligne de commande. La dernière version de Jelly peut résoudre la tâche donnée en 23 octets .
Essayez-le en ligne!
la source
Python 2,
5340Le roi a les coordonnées
(x, y)
et le pion(p, q)
.Il y a trois cas importants:
Le pion est au rang 7 et le roi au rang 8. Pour capturer le pion, le roi doit être sur le même fichier ou un fichier adjacent.
Résultat:
q = 7 ⋀ y = 8 → |x - p| ≤ 1
Le pion est au rang 7. Pour capturer le pion, le roi doit se trouver dans six fichiers.
Résultat:
q = 7 → |x - p| ≤ 6
Le pion est de rang inférieur. Pour capturer le pion, le roi doit pouvoir atteindre la case de promotion au plus un coup après le pion.
Résultat:
q < 7 → |x - p| ≤ q ⋀ y - 1 ≤ q
Ma solution, ce sont ces conditions qui ont été gâtées. Espérons qu'il n'y ait pas d'erreurs cette fois.
la source
abs
avecmax(y-1,x-p,p-x)
?f(1,8,1,7)
êtreTrue
parce que le roi capture immédiatement le pion? Je pense qu'il y a une subtilité où le pion rangée 7 ne peut pas être traité comme rangée 6 si le roi capture immédiatement.or
et-2
.Prolog,
4842 octetsCode:
Exemples:
Pas un mauvais défi pour Prolog par rapport à la plupart.
Edit: sauvé 6 octets en passant à la formule utilisée dans la réponse Python 2 de grc .
Malheureusement, Prolog ne peut pas enchaîner les comparaisons comme le fait Python et la division entière est 1 octet de plus que la division float.
Essayez-le en ligne ici
la source
JavaScript (ES6), 52
J'espère avoir sauvé des octets sans utiliser Math.abs, Math.min, Math.max
Le pion au septième rang peut s'échapper de 2 cases en mouvement, si et seulement si le roi n'est pas dans une colonne proche - c'est pourquoi il y a un contrôle
d
avant de remplacer 7 par 6.Cas de test à exécuter dans la console:
Résultat:
[true, true, true, true, false, false, false]
la source
Rubis, 50 octets
Les arguments sont (roi x, roi y, pion x, pion y), tous des entiers.
la source