Reacción en cadena (Parte #2)
Esta es una secuela de Reacción en cadena (Parte #1), con la misma configuración, pero con un enfoque diferente.
Al igual que en la parte anterior, se te dará un arreglo rectangular que representa un "mapa" con tres tipos de casillas:
- Bombas "+": cuando se activan, su explosión activa cualquier bomba que esté directamente arriba, abajo, a la izquierda o a la derecha de la bomba "+".
- Bombas "x": cuando se activan, su explosión activa cualquier bomba colocada en cualquiera de las cuatro direcciones diagonales junto a la bomba "x".
- Casillas vacías "0".
El objetivo es simple: dado un mapa, devuelve el número mínimo de bombas que deben detonarse para que todas las bombas sean destruidas por la reacción en cadena.
Veamos algunos ejemplos:
[
["+", "+", "+", "0", "+", "+", "+"],
["+", "+", "+", "0", "0", "+", "+"]
]En el mapa anterior, la respuesta es 2; para hacer explotar todas las bombas, solo tienes que detonar una bomba "+" en el grupo de la derecha y otra en el grupo de la izquierda.
[
["x", "0", "x"],
["x", "x", "x"]
]En el mapa anterior, la respuesta es 3; claramente, basta con detonar las tres bombas "x" de abajo, y no es posible hacerlo con menos de tres bombas.
[
["x", "x", "x", "0", "x"],
["x", "x", "x", "x", "x"],
["x", "x", "x", "0", "x"]
]En el mapa anterior, la respuesta es 3; detonar las tres bombas situadas más a la derecha de la fila central resolverá el problema.
Ejemplos
minBombsNeeded([
["+", "+", "+", "0", "+", "+", "+"],
["+", "+", "+", "0", "0", "+", "+"]
]) ➞ 2
minBombsNeeded([
["x", "0", "x"],
["x", "x", "x"]
]) ➞ 3
minBombsNeeded([
["x", "x", "x", "0", "x"],
["x", "x", "x", "x", "x"],
["x", "x", "x", "0", "x"]
]) ➞ 3Notas
- Ten en cuenta que tanto las bombas "+" como las bombas "x" tienen un "alcance de explosión" de 1.
- Para limitar la dificultad, en este desafío cada mapa tendrá únicamente bombas "+" o únicamente bombas "x". El caso más desafiante de mapas con bombas "+" y "x" será la parte 3!
- Determinar qué hacer es la mitad de la diversión, pero si prefieres encargarte solo de programarlo, en los comentarios encontrarás una pista sobre cómo abordar este desafío.