Parcours
/
Rust
Rust
/
Exercices
/
Champ de fleurs
Champ de fleurs

Champ de fleurs

Moyen

Introduction

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.

Instructions

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·

Astuce de performance

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 ?

Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Rust Exercism

Prêt à commencer Champ de fleurs ?

Inscris-toi sur Exercism pour apprendre et maîtriser Rust avec 99 exercices, et un vrai mentorat humain, le tout gratuitement.

Analyse approfondie de Champ de fleurs !

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.