Minesweeper es un juego muy popular en el que hay 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 añadir el número de minas a las casillas vacías de un tablero de Buscaminas ya completado. El tablero en sí es un rectángulo compuesto por casillas que están vacías (' ') o que contienen una mina ('*').
Para cada casilla vacía, cuenta cuántas minas tiene adyacentes (en horizontal, en vertical y en diagonal). Si la casilla vacía no tiene minas adyacentes, déjala vacía. En caso contrario, sustitúyela por el número de minas adyacentes.
Por ejemplo, puedes recibir un tablero de 5 x 4 como este (aquí los espacios vacíos se representan con el carácter '·' para mostrarlos en pantalla):
·*·*·
··*··
··*··
·····
Que tu código debería transformar en esto:
1*3*1
13*31
·2*2·
·111·
Todas las entradas y salidas están en ASCII.
Los Strings y los &str de Rust son UTF-8, así que, aunque se podría esperar que "Hello".chars() sea simple, en realidad hay que comprobar cada carácter para ver si mide 1, 2, 3 o 4 u8s de longitud.
Si sabemos que un &str es ASCII, podemos llamar a .as_bytes() y referirnos a los datos subyacentes como un &[u8] (slice de bytes).
Iterar sobre un slice de bytes ASCII es mucho más rápido, ya que no hay puntos de código implicados: cada byte ASCII ocupa un solo u8.
¿Puedes completar el reto sin clonar la entrada?
Regístrate en Exercism para aprender y dominar Rust con 99 ejercicios y mentoría humana real, todo gratis.
Exploramos bucles for anidados, un uso ingenioso de min/max para simplificar la comprobación de límites, canalizaciones funcionales y el uso de matrices bidimensionales.