#!/bin/python3defintlen(nb):l=0whilenb>=1:nb=nb/10l+=1returnldefispart(puzzle,line,col,n):try:ifpuzzle[line][col-1].isdigit():return0exceptIndexError:passtry:foriinrange(1,5):ifpuzzle[line][col+i].isdigit():n=n*10+int(puzzle[line][col+i])else:breakexceptIndexError:passforjin[1,-1]:foriinrange(-1,intlen(n)+1):try:ifpuzzle[line+j][col+i].isdigit()==Falseandpuzzle[line+j][col+i]!=".":returnnexceptIndexError:passforiin[-1,intlen(n)]:try:ifpuzzle[line][col+i].isdigit()==Falseandpuzzle[line][col+i]!=".":returnnexceptIndexError:passreturn0defisgear(puzzle,line,col,j):try:ifpuzzle[line][col].isdigit()==False:return0exceptIndexError:return0ifj!=-1:try:ifpuzzle[line][col-1].isdigit():return0exceptIndexError:passstart=0foriinrange(-1,-5,-1):try:ifpuzzle[line][col+i].isdigit():start-=1else:breakexceptIndexError:breakp=ispart(puzzle,line,col+start,int(puzzle[line][col+start]))returnpdefsolve1(puzzle,testing=False):s=0forlineinrange(len(puzzle)):forcolinrange(len(puzzle[line])):ifpuzzle[line][col]==".":continueelifpuzzle[line][col].isdigit():p=ispart(puzzle,line,col,int(puzzle[line][col]))s+=piftestingandp!=0:print("The part ",p," at ",line,";",col," is ok.")iftesting:print(s)returnsdefsolve2(puzzle,testing=False):s=0forlineinrange(len(puzzle)):forcolinrange(len(puzzle[line])):ifpuzzle[line][col]=="*":ng=0g=[0,0,0]foriin[1,0,-1]:forjin[1,0,-1]:g[ng]=isgear(puzzle,line+i,col+j,j)ifg[ng]!=0:ng+=1ifng==3:breakifng==3:breakifng==2:iftesting:print("Gear at ",line,";",col," with parts ",g[0],";",g[1])s+=g[0]*g[1]eliftesting:print("Gear at ",line,";",col," but with ",ng," parts.")iftesting:print(s)returnstest1="""467..114.....*........35..633.......#...617*...........+.58...592...........755....$.*.....664.598.."""result1=4361test2=test1result2=467835defsolve(short=False):print("----Part 1----")ifshort==False:ifsolve1(test1.split("\n"),testing=True)!=result1:print("Not working.")returnFalseelse:print("Maybe working?")withopen("input.txt",'r')asfile:lines=file.read().split("\n")s1=solve1(lines)print(s1)print("----Part 2----")ifshort==False:ifsolve2(test2.split("\n"),testing=True)!=result2:print("Not working.")returnFalseelse:print("Maybe working?")withopen("input.txt",'r')asfile:lines=file.read().split("\n")s2=solve2(lines)print(s2)returns1,s2if__name__=="__main__":fromsysimportargvtry:ifargv[1]=="--summary"orargv[1]=="-s":solve(short=True)exceptIndexError:solve()
J'ai passé beaucoup de temps à essayer de comprendre pourquoi diable les test fonctionnaient mais pas l'input ! La réponse était dans ma fonction pour récupérer la taille d'un entier :
defintlen(nb):l=0whilenb>0:nb=nb/10l+=1returnl
Avec while nb > 0 au lieu de while nb >= 1. Mais les données de test fonctionnaient, c'était incompréhensible.
Et oui, je suis un grand adepte du try ... except quand je code vite et crade.
L'informatique n'est pas une science exacte, on n'est jamais à l'abri d'un succès
# Python
Posté par alberic89 🐧 . En réponse au message Advent of Code 2023 : Day 3. Évalué à 1. Dernière modification le 04 décembre 2023 à 20:49.
Voici ma solution du jour :
J'ai passé beaucoup de temps à essayer de comprendre pourquoi diable les test fonctionnaient mais pas l'input ! La réponse était dans ma fonction pour récupérer la taille d'un entier :
Avec
while nb > 0au lieu dewhile nb >= 1. Mais les données de test fonctionnaient, c'était incompréhensible.Et oui, je suis un grand adepte du
try ... exceptquand je code vite et crade.L'informatique n'est pas une science exacte, on n'est jamais à l'abri d'un succès