L'objective de ce puzzle est d'aider pikaptcha à cartographier son environnement (un labyrinthe).Le but est de déterminer pour chaque point du labyrinthe son nombre de case adjacentes ou pikaptcha peut se déplacer. En entrée dans le programme, il y a la largeur puis hauteur du labyrinthe. hauteur de fois une chaîne de caractères de longueur largeur contenant une ligne de la grille où 0 est un passage et # est un mur. Voici un exemple d'entrée possible:
5 3
00#00#
0#00#0
#000#0
On doit donc retrouver en sortie :
21#21#
1#23#1
#132#1
J'ai décidé de placer chaque ligne dans une liste nommé grille. Ensuite j'ai séparé chaque élément de ma variable grille dans de nouvelles listes. J'obtiens donc une "matrice" comportant élément de la grille. Avec l'exemple d'entrée grille vaut:
[['0','0','#','0','0','#'],['0','#','0','0','#','0'],['#','0','0','0','#','0']
Ensuite je boucle sur chaque liste de grille, puis sur chaque element de ces listes. Je crée donc une boucle sur chaque élément de la grille. Je rends chaque '0' en entier pour pouvoir les incrémenter puis je teste pour chaque 0 si: l'element adjacent existe (c'est à dire qu'il n'est pas en dehors de la grille pour éviter une erreur du type "out of range"). Puis je teste si l'element est bien un nombre, c'est à dire un passage et non pas un mur. SI tel est le cas alors j'ajoute 1 à l'élément de la grille. Puis après avoir fini sur cet élément je le remets en chaîne de caractère (str) pour avoir plus de faciliter à afficher les lignes. Pour finir j'affiche chaque ligne de grille grâce à la fonction .join()
import sys
import math
width, height = [int(i) for i in input().split()] # Recuperation des variables largeur et hauteur de la grille
grille=[]
for i in range(height):
grille.append(input()) # Recuperation de chaque ligne de la grille
for i in range(height):
grille[i]=list(grille[i]) # Chaque element de la grille est dans une liste de la variable grille
for i in range(height): # Boucle sur chaque liste de la variable grille
for j in range(width): # Boucle sur chaque element de chaque liste de la variable grille
if grille[i][j]=='0': # Chaque 0 est rendu en int
grille[i][j]=0
if i>0 and grille[i-1][j]!='#': # Test si element du dessus existe et est different de '#'
grille[i][j]+=1 # Si oui alors l'element du dessus est un passage donc on incrémente de 1 car il y a un passage adjacent au dessus
if i<height-1 and grille[i+1][j]!='#': # De la meme facon pour l'element du dessous
grille[i][j]+=1
if j>0 and grille[i][j-1]!='#': # Element à gauche
grille[i][j]+=1
if j<width-1 and grille[i][j+1]!='#': # Element à droite
grille[i][j]+=1
grille[i][j]=str(grille[i][j]) # Chaque int rendu en str pour l'affichage
for element in (grille): # Affichage de chaque ligne
print("".join(element))