Minesweeper es un juego popular en el que el jugador tiene que encontrar las minas usando pistas numéricas que indican cuántas minas hay directamente adyacentes (en horizontal, en vertical o en diagonal) a una casilla.
Tu tarea es agregar el número de minas a los cuadros vacíos de un tablero de Buscaminas ya resuelto.
El tablero es un rectángulo compuesto por cuadros que están vacíos (' ') o que contienen una mina ('*').
Para cada cuadro vacío, cuenta cuántas minas tiene adyacentes (en horizontal, en vertical y en diagonal). Si el cuadro vacío no tiene minas adyacentes, déjalo vacío. De lo contrario, reemplázalo por la cantidad de minas adyacentes.
Por ejemplo, puedes recibir un tablero de 5 x 4 como este (los espacios vacíos se representan aquí con el carácter «·» para mostrarlos en pantalla):
·*·*·
··*··
··*··
·····
Y tu código debe transformarlo en este:
1*3*1
13*31
·2*2·
·111·
A veces es necesario lanzar una excepción. Cuando lo hagas, siempre debes incluir un mensaje de error significativo que indique cuál es el origen del error. Esto hace que tu código sea más legible y ayuda mucho con el debugging. Cuando sepas que el origen del error va a ser de un tipo determinado, puedes optar por lanzar uno de los tipos de error integrados, pero aun así debes incluir un mensaje significativo.
Este ejercicio en particular requiere que uses la sentencia raise para «lanzar» un ValueError cuando la función board() recibe datos mal formados. Las pruebas solo pasarán si usas raise con la exception y además incluyes un mensaje con ella.
Para lanzar un ValueError con un mensaje, escribe el mensaje como un argumento del tipo exception:
# when the board receives malformed input
raise ValueError("The board is invalid with current input.")
Regístrate en Exercism para aprender y dominar Python con 17 conceptos146 ejercicios y mentoría humana real, todo gratis.
Exploramos bucles for anidados, el uso ingenioso de min/max para simplificar la verificación de límites, las canalizaciones funcionales y el uso de matrices bidimensionales.