Démineur

Démineur

Moyen

Introduction

Le démineur est un jeu populaire où le joueur doit trouver les mines à l'aide d'indices numériques qui indiquent combien de mines sont directement adjacentes (horizontalement, verticalement, en diagonale) à une case.

Instructions

Ta tâche consiste à ajouter le décompte des mines aux cases vides d'un plateau de Minesweeper terminé. Le plateau lui-même est un rectangle composé de cases, qui sont soit vides (' '), soit des mines ('*').

Pour chaque case vide, compte le nombre de mines adjacentes (horizontalement, verticalement, en diagonale). Si la case vide n'a aucune mine adjacente, laisse-la vide. Sinon, remplace-la par le nombre de mines adjacentes.

Par exemple, tu peux recevoir un plateau de 5 x 4 comme celui-ci (les cases vides sont ici représentées par le caractère « · » pour l'affichage à l'écran) :

·*·*·
··*··
··*··
·····

Ton code doit le transformer en ceci :

1*3*1
13*31
·2*2·
·111·

Astuce de performance

Toutes les entrées et sorties sont en ASCII. Les String et les &str de Rust sont en utf8, donc même si l'on pourrait s'attendre à ce que "Hello".chars() soit simple, il doit en réalité vérifier chaque char 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 voir 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 Démineur ?

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

Analyse approfondie de Démineur !

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.