En ajedrez, un caballero solo puede moverse a las posiciones marcadas con X en relación con su posición actual, marcadas con ♞:
Un gráfico de caballero es un gráfico que representa todos los movimientos legales de la pieza de ajedrez de caballero en un tablero de ajedrez. Cada vértice de este gráfico representa un cuadrado del tablero de ajedrez, y cada borde conecta dos cuadrados que se separan el uno del otro.
El gráfico se ve así para una placa estándar de 8 por 8.
Desafío:
Dado un entero N , donde 3 ≤ N ≤ 8 , genera una matriz N-por-N que representa un tablero, donde se muestra el número de movimientos posibles desde cada posición. Para N = 8 , la salida será una matriz que muestra los valores de cada vértice en el gráfico anterior.
El formato de salida es flexible. La lista de listas o incluso una lista aplanada, etc., son formatos aceptados.
Conjunto completo de casos de prueba:
--- N = 3 ---
2 2 2
2 0 2
2 2 2
--- N = 4 ---
2 3 3 2
3 4 4 3
3 4 4 3
2 3 3 2
--- N = 5 ---
2 3 4 3 2
3 4 6 4 3
4 6 8 6 4
3 4 6 4 3
2 3 4 3 2
--- N = 6 ---
2 3 4 4 3 2
3 4 6 6 4 3
4 6 8 8 6 4
4 6 8 8 6 4
3 4 6 6 4 3
2 3 4 4 3 2
--- N = 7 ---
2 3 4 4 4 3 2
3 4 6 6 6 4 3
4 6 8 8 8 6 4
4 6 8 8 8 6 4
4 6 8 8 8 6 4
3 4 6 6 6 4 3
2 3 4 4 4 3 2
--- N = 8 ---
2 3 4 4 4 4 3 2
3 4 6 6 6 6 4 3
4 6 8 8 8 8 6 4
4 6 8 8 8 8 6 4
4 6 8 8 8 8 6 4
4 6 8 8 8 8 6 4
3 4 6 6 6 6 4 3
2 3 4 4 4 4 3 2
Este es el código de golf, por lo que gana la solución más corta en cada idioma. ¡Se alientan las explicaciones!
Respuestas:
MATL ,
1716 bytesPruébalo en línea!
(-1 byte gracias a @Luis Mendo.)
(En relación con el centro de la matriz, cada 1 es un movimiento válido de caballero).
t&l
- Forme una matriz nxn de todos los 1 (donde n es la entrada). Deja que esto sea M.[2K0]
- Empuje una matriz que contenga [2, 4, 0] en la pilaB
- Convierta todo a binario, relleno con 0s según sea necesario2:&Zv
- Refleje eso en ambas dimensiones, sin repetir la fila / columna final ("indexación de rango simétrico"). Esto nos da la matriz requerida K.Z+
- Realice una convolución 2D de K sobre la matriz anterior M (conv2(M, K, 'same')
), sumando los 1 en objetivos de movimiento de caballero legales para cada posiciónLa matriz de resultados se muestra implícitamente.
fuente
11043370BP5e
pero eso no es más corto ...Python 2 , 81 bytes
Pruébalo en línea!
fuente
JavaScript (ES6), 88 bytes
Devuelve una cadena.
Pruébalo en línea!
¿Cómo?
JavaScript (ES7), 107 bytes
Una implementación ingenua que realmente intenta todos los movimientos.
Pruébalo en línea!
fuente
Gelatina ,
23 22 1410 bytesUn enlace monádico que produce una lista plana, utiliza la idea que utilizó KSab por primera vez en su respuesta de Python , los movimientos de los caballeros tienen "lados" 1 y 2, los únicos factores de 2.
Pruébalo en línea! (el pie de página llama al único enlace del programa y luego formatea el resultado como una cuadrícula)
²Ḷdðạ²§ċ5)
¿Cómo?
22 byter anterior
Un programa completo (debido a
³
).Pruébalo en línea! (el pie de página llama al único enlace del programa y luego formatea el resultado como una cuadrícula)
Encuentra todos los movimientos y cuenta aquellos que aterrizan en el tablero
probablementedefinitivamente superables mediante el cálculo (tal vez superable al cambiar la lógica de "aterrizar en el tablero").fuente
APL (Dyalog Classic) , 18 bytes
Pruébalo en línea!
⎕
entrada evaluada N2⍴⎕
dos copias de N⍳2⍴⎕
Los índices de una matriz N × N - una matriz de vectores de longitud 2∘.-⍨
restar cada par de índices entre sí, obtener una matriz N × N × N × N|
valor absoluto×/¨
producto cada2=
donde estan los 2s devolver una matriz booleana (0/1)Tenga en cuenta que un caballero se mueve ± 1 en un eje y ± 2 en el otro, por lo que el valor absoluto del producto de esos pasos es 2. Como 2 no puede factorizarse de ninguna otra manera, esto es válido solo para movimientos de caballero.
+/+/
suma a lo largo de la última dimensión, dos vecesfuente
RAD ,
514639 bytesPruébalo en línea!
¿Cómo?
Cuenta el número de movimientos de caballero válidos para cada casilla al ver qué movimientos de caballero aterrizarían en el tablero:
fuente
Brachylog ,
654033 bytesEsto se descompone para N mayor que 9. Entonces estoy feliz de que N solo pueda ir a 8 =)
Pruébalo en línea!
Brachylog ,
4436 bytesEste también funciona para un número superior a 9
Pruébalo en línea!
fuente
⟨∋≡∋⟩
principio para generar las coordenadas de la matriz y guardar 7 bytes en general (la salida es una lista plana, que está permitida por OP): ¡ Pruébelo en línea!Retina , 161 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación:
Convierte a unario.
Liste el valor una vez para cada
_
valor, es decir, cree un cuadrado.Comenzando
_
en el medio de la expresión regular, intente hacer coincidir el contexto suficiente para determinar si es posible cada uno de los movimientos de los ocho caballeros. Cada patrón captura un solo personaje si la coincidencia tiene éxito. Intenté usar grupos con nombre para que el número de capturas sea directamente igual al resultado deseado, pero eso costó 15 bytes.Concatene todas las capturas exitosas y tome la longitud.
fuente
Wolfram Language (Mathematica) , 34 bytes
Sin embargo, otro Mathematica incorporado.
Devuelve una lista aplanada.
Pruébalo en línea!
fuente
Python 2 ,
11410392 bytesPruébalo en línea!
fuente
C (gcc) ,
133125bytesEsta solución debería funcionar en tableros de cualquier tamaño.
Pruébalo en línea!
fuente