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.
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·
Il est parfois nécessaire de lever une exception. Dans ce cas, il faut toujours inclure un message d'erreur explicite qui indique l'origine de l'erreur. Cela rend le code plus lisible et facilite grandement le débogage. Lorsqu'on sait que l'origine de l'erreur sera d'un type donné, on peut lever l'un des types d'erreur intégrés, mais il faut quand même inclure un message explicite.
Cet exercice demande en particulier d'utiliser l'instruction raise pour « lever » une ValueError lorsque la fonction board() reçoit une entrée mal formée. Les tests ne réussiront que si tu raise l'exception en y joignant un message.
Pour lever une ValueError accompagnée d'un message, écris ce message comme argument du type exception :
# when the board receives malformed input
raise ValueError("The board is invalid with current input.")
Inscris-toi sur Exercism pour apprendre et maîtriser Python avec 17 concepts146 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.