Retour aux défis
Moyen 0 résolus 0 % de réussite

Comptage des mines voisines au Démineur

Annoter un plateau rectangulaire.

Ce que vous allez apprendre

  • Parcourir les 8 voisins d'une case
  • Rester dans les limites de la grille
  • Construire une copie annotée du plateau

Problème

Annoter un plateau rectangulaire. Une étoile (*) représente une mine et un point (.) une case sûre. Pour chaque case sûre, comptez les mines dans les huit cases adjacentes, y compris en diagonale. Remplacez-la par le nombre de mines de 1 à 8, ou laissez un point si le compte est zéro. Préservez chaque mine. Les cases en dehors du plateau n'existent pas.

Implémentez minesweeper_neighbor_counts(board).

Entrée

board : Les lignes du haut vers le bas ; les caractères vont de gauche à droite.

Sortie

Renvoyez les lignes annotées dans le même ordre et avec les mêmes dimensions.

Contraintes

1 ≤ lignes, colonnes ≤ 200. Chaque ligne a la même longueur non nulle et ne contient que * et . .

Exemples

Exemple 1
Entrée :
board = ["*..", "...", "..*"]

Sortie attendue :
expected = ["*1.", "121", ".1*"]
Entrée :
std::vector<std::string> board = {"*..", "...", "..*"};

Sortie attendue :
std::vector<std::string> expected = {"*1.", "121", ".1*"};
Entrée :
string[] board = new string[] {"*..", "...", "..*"};

Sortie attendue :
string[] expected = new string[] {"*1.", "121", ".1*"};

Explication

La case centrale touche les deux mines, donc son compte est 2. La case en haut à droite et celle en bas à gauche ne touchent aucune mine et restent des points. Les autres cases sûres touchent une mine.

Exemple 2
Entrée :
board = ["..."]

Sortie attendue :
expected = ["..."]
Entrée :
std::vector<std::string> board = {"..."};

Sortie attendue :
std::vector<std::string> expected = {"..."};
Entrée :
string[] board = new string[] {"..."};

Sortie attendue :
string[] expected = new string[] {"..."};

Explication

Ce plateau à une seule ligne ne contient aucune mine. Tous les comptes sont à zéro, donc chaque point reste un point.

Comment l'aborder

Essayez d'abord seul, puis ouvrez les indices un par un.

Indice 1

Seules les cases sûres changent ; les mines restent exactement où elles sont.

Indice 2

Pour chaque point, inspectez les huit positions autour et comptez les mines voisines.

Indice 3

Faites attention aux bords et aux coins pour ne pas lire en dehors du plateau.

Complexité attendue

temps O(r*c), espace supplémentaire O(r*c)

Références

Ce défi a été adapté pour CodeUtility. Suivez l'énoncé et les contraintes ci-dessus.

Apprenez des autres

Solutions de la communauté

Aucune solution publiée pour l'instant. Résolvez ce défi pour partager la première.