Dada una entrada de cuatro enteros x 1 , y 1 , x 2 e y 2 , genera si un rey blanco en el ajedrez (con coordenadas ( x 1 , y 1 )) podría atrapar un peón negro (con coordenadas ( x 2 , y 2 )) y captúralo si el peón se mueve para ascender a una reina lo más rápido posible.
Las coordenadas del tablero son las siguientes:
first coordinate (x)
12345678
1 .#.#.#.#
2 #.#.#.#.
3 .#.#.#.#
second 4 #.#.#.#.
coordinate 5 .#.#.#.#
(y) 6 #.#.#.#.
7 .#.#.#.#
8 #.#.#.#.
Suponga que es blanco para moverse (el turno del rey) y que ambos jugadores juegan de manera óptima (el rey se moverá lo más rápido posible para atrapar el peón, y el peón se moverá lo más rápido posible para ascender). Las coordenadas de entrada siempre serán distintas, y el peón nunca comenzará con una coordenada y de 8.
El rey se mueve una casilla en cualquier dirección cada turno (puede moverse en diagonal), y el peón solo puede moverse un espacio hacia adelante (disminuir su coordenada y), a menos que esté en su posición inicial (con nuestro sistema de coordenadas, coordenada y de 7), en cuyo caso puede mover dos espacios hacia adelante.
La entrada puede darse como una cadena separada por comas / espacios en blanco, una matriz de cadenas / enteros o cuatro argumentos de función / línea de comando / etc. Las coordenadas se pueden dar en el orden que sea más conveniente / golfista (por lo tanto, aceptar la entrada como [y 2 , y 1 , x 1 , y 2 ] está bien siempre que sea coherente). La salida debe ser un valor verdadero o falso .
Como se trata de código golf , gana el código más corto en bytes.
Casos de prueba de verdad :
5 3 3 2
6 1 1 7
3 3 3 2
4 1 4 7
7 7 1 7
1 8 1 7
Casos de prueba de falsa :
6 4 3 2
8 8 1 7
3 4 3 2
x1 y1 x2 y2
?1 8 1 7
, donde el rey captura antes de que el peón pueda mover dos espacios. Creo que todas las respuestas ahora se equivocan. Esta situación hace que el problema sea mucho más difícil.Respuestas:
Jalea , 33 bytes
Este programa lee las coordenadas a partir
x2\nx1\ny2\ny1
de STDIN. Pruébalo en línea!Versión no competitiva
Desafortunadamente, el intérprete de Jelly tenía un error cuando se publicó esta pregunta. Dicho error le impidió aceptar más de dos argumentos de línea de comandos. La versión más nueva de Jelly puede resolver la tarea dada en 23 bytes .
Pruébalo en línea!
fuente
Pitón 2,
5340El rey tiene coordenadas
(x, y)
y el peón(p, q)
.Hay tres casos importantes:
El peón está en el rango 7 y el rey en el rango 8. Para capturar el peón, el rey debe estar en el mismo archivo o en uno adyacente.
Resultado:
q = 7 ⋀ y = 8 → |x - p| ≤ 1
El peón está en el rango 7. Para capturar el peón, el rey debe estar dentro de seis archivos.
Resultado:
q = 7 → |x - p| ≤ 6
El peón está en un rango inferior. Para capturar el peón, el rey debe poder alcanzar la casilla de promoción como máximo un movimiento después del peón.
Resultado:
q < 7 → |x - p| ≤ q ⋀ y - 1 ≤ q
Mi solución es solo estas condiciones de golf. Esperemos que no haya errores esta vez.
fuente
abs
conmax(y-1,x-p,p-x)
?f(1,8,1,7)
serTrue
porque el rey captura inmediatamente el peón? Creo que hay una sutileza en la que la fila de peones 7 no puede tratarse como la fila 6 si el rey captura de inmediato.or
y-2
.Prolog,
4842 bytesCódigo:
Ejemplos:
No es un mal desafío para Prolog en comparación con la mayoría.
Editar: guardado 6 bytes al cambiar a la fórmula utilizada en la respuesta Python 2 de grc .
Desafortunadamente, Prolog no puede encadenar las comparaciones como la pitón puede y la división entera es 1 byte más larga que la división flotante.
Pruébalo en línea aquí
fuente
JavaScript (ES6), 52
Espero haber guardado bytes sin usar Math.abs, Math.min, Math.max
El peón en la fila siete puede escapar moviendo 2 espacios, si y solo si el rey no está en una columna cercana, es por eso que hay un control sobre
d
antes de sustituir 7 por 6.Caso de prueba para ejecutar en la consola:
Resultado:
[true, true, true, true, false, false, false]
fuente
Ruby, 50 bytes.
Los argumentos son (rey x, rey y, peón x, peón y), todos los enteros.
fuente