Flower Field es una reinterpretación compasiva del popular juego Buscaminas. El objetivo del juego es encontrar todas las flores del jardín con la ayuda de 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 consiste en añadir el recuento 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 o bien están vacías (' ') o bien contienen una flor ('*').
Para cada casilla vacía, cuenta el número de flores adyacentes (en horizontal, en vertical y en diagonal). Si la casilla vacía no tiene flores adyacentes, déjala vacía. En caso contrario, sustitúyela por el número de flores adyacentes.
Por ejemplo, puede que recibas un tablero de 5 x 4 como este (aquí los espacios vacíos se representan con el carácter '·' para que se vean en pantalla):
·*·*·
··*··
··*··
·····
Que tu código debe transformar en esto:
1*3*1
13*31
·2*2·
·111·
Todas las entradas y salidas están en ASCII.
Los String y los &str de Rust son utf8, así que aunque cabría esperar que "Hello".chars() fuera sencillo, en realidad tiene que comprobar 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] (una porción de bytes).
Iterar sobre una porción de bytes ASCII es mucho más rápido, ya que no hay puntos de código de por medio: 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.