Flower Field es una reinvención compasiva del popular juego Buscaminas. El objetivo del juego es encontrar todas las flores del jardín usando pistas numéricas que indican cuántas flores hay directamente adyacentes (en horizontal, en vertical o en diagonal) a una casilla. «Flower Field» se distribuyó en versiones regionales de Microsoft Windows en Italia, Alemania, Corea del Sur, Japón y Taiwán.
Tu tarea es agregar el conteo de flores a las casillas vacías de un jardín de Campo de flores ya completado.
El jardín en sí es un tablero rectangular compuesto por casillas que están vacías (' ') o tienen una flor ('*').
Para cada casilla vacía, cuenta cuántas flores tiene adyacentes (en horizontal, en vertical y en diagonal). Si la casilla vacía no tiene flores adyacentes, déjala vacía. De lo contrario, reemplázala por el conteo de flores 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 debe transformar en esto:
1*3*1
13*31
·2*2·
·111·
Todas las entradas y las salidas están en ASCII.
Las String y los &str de Rust son UTF-8, así que, aunque uno podría esperar que "Hello".chars() sea simple, en realidad tiene que revisar cada carácter para ver si ocupa 1, 2, 3 o 4 u8.
Si sabemos que un &str es ASCII, podemos llamar a .as_bytes() y referirnos a los datos subyacentes como un &[u8] (slice de bytes).
Recorrer un slice de bytes ASCII es mucho más rápido, ya que no hay puntos de código involucrados: cada byte ASCII ocupa un solo 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.