El 3BV de un tablero de Buscaminas representa el número mínimo de clics izquierdos necesarios para resolver el tablero si ya conoce la solución. Es sinónimo de "Valor de referencia de la Junta de Bechtel". Aquí está su sitio explicándolo.
A continuación se muestra un tablero de Buscaminas resuelto. Las banderas indican minas; las fichas sin minas indican el recuento de minas adyacentes, incluso en diagonal, excepto que las fichas que deberían tener "0" se dejan en blanco. La imagen muestra en qué mosaicos se debe hacer clic para resolver el tablero.
Los clics contados hacia el 3BV son:
- Uno para cada área llena de inundaciones de mosaicos en blanco (cero minas adyacentes) y sus vecinos no en blanco.
- Uno para el otro azulejo no minero.
Otro ejemplo (3BV = 39)
Dada una matriz de valores 2D, 0
para clear y 1
para una mina (o un booleano), devuelve el 3BV .
Las dimensiones de una placa serán de al menos 8x8, y como máximo 24x30, inclusive. Su programa debe manejar todos los tableros posibles, no solo los ejemplos.
Nota: Un tablero nunca contendrá solo minas.
Ejemplo de E / S:
[[0,0,0,0,0,0,0,0],
[0,0,0,1,0,0,0,0],
[0,0,0,1,0,0,1,0],
[0,1,0,0,1,0,0,0],
[0,0,1,0,0,0,0,1],
[0,0,0,1,0,0,0,0],
[0,0,0,0,0,0,1,0],
[0,0,0,0,0,0,0,1]]
23
[[0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0],
[0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,0,0],
[0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,0,0,1,0,1,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,1,0,0,1,1,0,0,0],
[0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0],
[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,1],
[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1],
[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0],
[0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0],
[0,0,1,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0],
[1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,1],
[0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0],
[0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,1,0,1,1,0,0,0,1,0,0,0,1,1,0,0],
[0,1,1,1,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0],
[0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,1,0,0,0],
[0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0]]
187
fuente
Respuestas:
MATLAB,
92908683797472 bytesEsta solución acepta la entrada en forma de una matriz 2D de 0 y 1 y mostrará el valor de 3BV para la entrada proporcionada.
Aquí hay una demostración ligeramente modificada en Octave para aquellos de ustedes sin MATLAB.
Explicación
La matriz de entrada se dilata usando una matriz de 3 x 3
1
y luego se invierte (usando~
) que identifica todos los puntos que no tienen minas como vecinos (1
) o do (0
). Para determinar el número de regiones conectadas, usamosbwlabel
para etiquetar cada región conectada de1
's. La primera salida es la matriz de etiquetas (0
donde la entrada era cero y cualquier valor en el rango1...N
donde había un1
en la entrada dondeN
está el índice del grupo conectado al que pertenece). El segundo resultado es la cantidad de regiones (la cantidad de clics necesarios para abrirlas). El resultado delbwlabel
se muestra en la imagen de la izquierda.Expandimos la primera salida de
bwlabel
usarimdilate
(todos los no ceros se expanden) usando una matriz de 3 x 3 de1
's. El resultado se muestra en la imagen en el medio.Para determinar los clics restantes, contamos los cuadrados que no están en esta región expandida (
~imdilate()
) y no una mina (-x
) (cuadrados blancos en la imagen de la derecha) y agregamos esto al número total de regiones abiertas (el número de diferentes colores en la imagen de la izquierda) para obtener el 3BV.fuente
Octava,
86847966 bytesEsta solución crea una función anónima llamada
ans
que luego se puede pasar una matriz 2D de0
'sy1
' s. La lógica es la misma que mi respuesta de MATLAB, pero utiliza algunos trucos que Octave tiene para ofrecer para ahorrar espacio.Esta solución requiere que el
image
paquete esté instalado.Demo aquí
fuente
MATL,
242221 bytes (no competidor)1 byte guardado gracias a @Luis
Pruébalo en MATL Online
Explicación
Nuevamente, esto es similar a mis respuestas de MATLAB y Octave a esta pregunta.
fuente
bwlabeln
funcionalidad se introdujo en MATL después de que se publicó el desafío.