moi c'est en python, mais c'est une NON réponse... il doit me manquer des cas que je n'identifie pas...
defnettoyer_point(chaine):"""recupère les symboles à utiliser autres que '.'"""chaine=chaine.replace(".","")foriin[iforiinrange(10)]:chaine=chaine.replace(str(i),'')liste=[]forcaracinchaine:ifnotcaracinliste:liste.append(carac)returnlisteprint(nettoyer_point(computer2))defest_voisin_symbol(matrice_,x,y):"renvoie si la case x, y est voisine d'un symbole"matrice=matrice_.copy()foriinrange(-1,2):forjinrange(-1,2):matriceif0<=x+iand0<=y+jandnot(i==j==0):try:#if not(matrice[x][y]=='.' or matrice[x][y].isdigit()):ifmatrice[x+i][y+j]in['*','&','/','@','=','+','#','$','%','-']:returnTrue,matrice[x+i][y+j]exceptIndexError:passreturnFalse,Nonematrice=[]forligneincomputer2.split('\n'):#print(ligne)ligne_=[]forcaracinligne:ligne_.append(carac)matrice.append(ligne_)defverifie_chaine(matrice,chaine,x,y):"parcours la chaine de gauche à droite jusqu'a un espace"x,y=x,y-1for_inrange(len(chaine)):result,symbol=est_voisin_symbol(matrice,x,y)ifresult:returnTrue,symboly-=1returnFalse,Nonei=0somme=0whilei<len(matrice):j=0nombre=""whilej<len(matrice[0]):ifmatrice[i][j].isdigit()andj!=len(matrice[0])-1:nombre+=matrice[i][j]else:#gestion dernier sympbol : ifj==len(matrice[0])-1:ifmatrice[i][j].isdigit():nombre+=matrice[i][j]result,symbol=verifie_chaine(matrice,nombre,i,j)ifresult:#print(nombre, symbol)somme+=int(nombre)else:ifnombre!='':print('NON',nombre)nombre=""j+=1i+=1
# Bonne idée.
Posté par djibb (site web personnel) . En réponse au message Advent of Code 2023 : Day 3. Évalué à 2. Dernière modification le 04 décembre 2023 à 08:27.
moi c'est en python, mais c'est une NON réponse... il doit me manquer des cas que je n'identifie pas...