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·
Todos los argumentos y valores devueltos están en ASCII.
Rust Strings y &str son utf8, así que, aunque uno podría esperar que "Hello".chars() sea sencillo, en realidad tiene que comprobar cada char para ver si mide 1, 2, 3 o 4 u8s de largo.
Si sabemos que un &str es ASCII, entonces podemos llamar a .as_bytes() y referirnos a los datos subyacentes como un &[u8] (segmento de bytes).
Iterar sobre un segmento de bytes ASCII es mucho más rápido, ya que no hay puntos de código involucrados: cada byte ASCII mide un u8.
¿Puedes completar el reto sin clonar el argumento?
Regístrate en Exercism para aprender y dominar Rust con 99 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.