Deje que un tablero de ajedrez de 8x8 esté representado por dos valores distintos, uno de los cuales es un cuadrado vacío y el otro una reina. En los siguientes ejemplos, uso 0s como cuadrados vacíos y 1s como reinas. Por ejemplo:
es dado por
1 0 1 1 1 0 0 0
1 0 1 0 1 0 1 1
1 0 1 0 1 1 0 1
0 1 0 1 0 1 0 0
0 1 1 0 0 1 0 1
1 0 0 0 1 0 0 0
0 1 0 0 0 1 1 1
0 1 1 1 0 1 0 1
Considere el número de pares de reinas que están atacando a cada uno que están al menos a un cuadrado de distancia (como recordatorio, las reinas atacan ortogonal y diagonalmente). En el ejemplo anterior, el siguiente diagrama feo increíble muestra todos estos pares como flechas.
Hay 43 pares encontrados arriba que dan el siguiente caso de prueba:
Input:
1 0 1 1 1 0 0 0
1 0 1 0 1 0 1 1
1 0 1 0 1 1 0 1
0 1 0 1 0 1 0 0
0 1 1 0 0 1 0 1
1 0 0 0 1 0 0 0
0 1 0 0 0 1 1 1
0 1 1 1 0 1 0 1
Output: 43
Reto
Escriba un programa que, dado un estado de tablero representado por dos valores distintos, genere el número de pares de reinas que se atacan entre sí con al menos un cuadrado entre ellas.
- Puede ingresar en el formato que sea más conveniente que use dos valores para representar los cuadrados vacíos y las reinas, por ejemplo, una cadena de 64 "." S para cuadrados vacíos y "Q" s para reinas por filas de abajo hacia arriba, un 8x8 matriz de booleanos, una lista de la lista de enteros 0 y 1, etc., siempre que se explique en su solución
- La salida es un entero
- Se aplican métodos de E / S estándar y se prohíben las lagunas estándar
- Este es el código de golf, por lo que la respuesta más corta en bytes gana
Casos de prueba:
Usando el formato 0 y 1, con 0 siendo cuadrados vacíos y 1 siendo reinas:
Input:
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
Output: 0
Input:
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
Output: 0
Input:
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 1 0 0 0 0 1 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
Output: 1
Input:
0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0
0 0 0 0 1 0 0 0
0 1 0 0 0 0 1 0
0 0 0 0 1 0 1 0
0 0 0 0 0 0 0 0
0 0 0 1 0 0 1 0
0 0 0 0 0 0 0 0
Output: 10
Input:
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 0 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
Output: 4
Input:
1 1 0 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 0 1 1 1
1 1 1 1 0 1 1 1
1 1 1 1 0 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
Output: 11
fuente
Respuestas:
Python 2 , 105 bytes
Pruébalo en línea!
Explicación
Tomamos la entrada como una cadena de 64 caracteres
'0'
o'1'
. Usando cortes escalonados, lanzamos cuatro "líneas de visión" de cada reina que encontramos. Por ejemplo, cuando i = 10 y d = 7 , marcando la reina como ♥ y los azulejos seleccionados porb[i+d::d]
como █:Claramente, en realidad no queremos que la visión se ajuste al tablero de esta manera. Así que calculamos qué tan lejos está el borde del tablero en cada dirección, y vemos los mosaicos en
b[i+d::d][:…]
.Para cada par de dirección de mosaico contamos:
Esto fallará siempre
c
no es una reina; ofind
devuelve 0); ofind
devuelve -1).Cada par de reinas solo se verifica una vez, ya que los rayos siempre se proyectan hacia adelante con el fin de leer, de una reina "anterior" a uno "más adelante".
fuente
JavaScript (ES7), 86 bytes
Toma datos como una matriz de 64 enteros con 254 para una reina y 0 para un cuadrado vacío.
Pruébalo en línea!
Esta versión abusa del flujo inferior aritmético para obtener una condición de detención en la parte recursiva.
JavaScript (ES7), 89 bytes
Toma entrada como una matriz de 64 bits.
Pruébalo en línea!
¿Cómo?
Llamamos recursivamente a una función de devolución de llamada con nombre de
map()
caminar por los cuadrados en una dirección determinada. Aunque realmente no necesitamos el contenido del tercer parámetro de la devolución de llamada (map()
se solicitó la matriz ), indirectamente lo usamos para saber si es la primera iteración o no.Esta es la variable x en el código.
fuente
Caracoles , 14 bytes
Pruébalo en línea!
La entrada es el formato 0/1, sin espacios dentro de las líneas.
Snails fue creado para un desafío de PPCG de diseño de lenguaje de coincidencia de patrones 2D . Lo más importante es que, por defecto, genera el número de coincidencias encontradas, lo cual es perfecto para este desafío.
A
establece la opción "todos los caminos", de modo que si una reina está en varios pares, cada uno de esos pares generaría una coincidencia.rdaa7
establece la dirección del partido en S, SE, E y NE. Establecer en todas las direcciones (z
) causaría un doble recuento.\1\0+\1
coincide con a1
, luego uno o más0
s, luego otro1
.fuente
APL (Dyalog Classic) ,
413932 bytesPruébalo en línea!
≠⍨
es "no igual a sí mismo" - una matriz de 8x8 todo cero⊢,≠⍨,⌽,≠⍨
- si la matriz original esABC...
, esta expresión devuelve:8 31⍴
le da nueva forma de 8x32 a 8x31, reutilizando los elementos en orden de fila mayor:⊢,⍉,
antepone la matriz original y su transposición (espacios adicionales para mayor claridad):2<⌿0⍪
agrega 0s en la parte superior y compara usando<
cada elemento contra el elemento debajo de él, por lo que obtenemos un 1 para el 1 inicial en cada grupo vertical de 1s, y obtenemos 0s en cualquier otro lugar+⌿-⌈⌿
las sumas por columna menos los máximos por columna: calculamos el número de espacios entre los grupos 1 en cada columna, 0 si no hay ninguno+/
sumafuente
Jalea ,
2220 bytesPruébalo en línea!
fuente
Retina 0.8.2 ,
6058 bytesPruébalo en línea! Toma la entrada como 8 cadenas binarias de 8 caracteres separadas por comas, pero el encabezado convierte el formato proporcionado por usted. Explicación:
Crea todas las subcadenas del tablero comenzando en una reina. Sufije un valor de marcador a cada subcadena. Editar: guardado 2 bytes dejando algunas cadenas de basura detrás; estos son efectivamente ignorados.
Divida cada marcador en un rango inclusivo y agregue 7 a los elementos distintos de cero.
Elimine cada serie de caracteres que sea igual a la longitud del marcador. Esto es equivalente a encontrar cada rayo este, suroeste, sur o sureste de cada reina.
Cuenta todos los rayos que pasan por al menos un cuadrado vacío antes de conocer a otra reina.
fuente
JavaScript (ES6) + SnakeEx , 38 bytes
Toma entrada en el formulario
'10111000\n10101011\n10101101\n01010100\n01100101\n10001000\n01000111\n01110101'
. Resulta que SnakeEx todavía se puede usar fuera de su desafío original.fuente
K (ngn / k) , 45 bytes
Pruébalo en línea!
fuente