Flower Field est une réinterprétation bienveillante du célèbre jeu Démineur. Le but du jeu est de trouver toutes les fleurs du jardin à l'aide d'indices numériques qui indiquent combien de fleurs sont directement adjacentes (horizontalement, verticalement, en diagonale) à une case. « Flower Field » était inclus dans les versions régionales de Microsoft Windows en Italie, en Allemagne, en Corée du Sud, au Japon et à Taïwan.
Ta tâche consiste à indiquer le nombre de fleurs dans les cases vides d'un jardin Champ de fleurs terminé. Le jardin est un plateau rectangulaire composé de cases, qui sont soit vides (' '), soit occupées par une fleur ('*').
Pour chaque case vide, compte le nombre de fleurs qui lui sont adjacentes (horizontalement, verticalement ou en diagonale). Si une case vide n'a aucune fleur adjacente, laisse-la vide. Sinon, remplace-la par le nombre de fleurs adjacentes.
Par exemple, tu peux recevoir un plateau 5 x 4 comme celui-ci (ici, les cases vides sont représentées par le caractère « · » pour l'affichage à l'écran) :
·*·*·
··*··
··*··
·····
Que ton code doit transformer en ceci :
1*3*1
13*31
·2*2·
·111·
Toutes les entrées et toutes les sorties sont en ASCII.
En Rust, les String et les &str sont en utf8, donc même si on pourrait s'attendre à ce que "Hello".chars() soit simple, il doit en réalité vérifier chaque caractère pour savoir s'il fait 1, 2, 3 ou 4 u8 de long.
Si on sait qu'un &str est en ASCII, on peut alors appeler .as_bytes() et considérer les données sous-jacentes comme un &[u8] (une tranche d'octets).
Parcourir une tranche d'octets ASCII est bien plus rapide, car aucun point de code n'entre en jeu : chaque octet ASCII fait un u8 de long.
Peux-tu relever le défi sans cloner l'entrée ?
Inscris-toi sur Exercism pour apprendre et maîtriser Rust avec 99 exercices, et un vrai mentorat humain, le tout gratuitement.
On explore les boucles `for` imbriquées, l'utilisation astucieuse de min/max pour simplifier la vérification des bornes, les _pipelines_ fonctionnels et le recours à des matrices à deux dimensions.