Le parsing de l'input est presque plus long à écrire que l'application de règles : 4 boucles for imbriquées et 4 split contre 3 boucles while imbriquées.
Voici mon code pour la partie deux. La partie est identique excepté la condition de sortie.
importsysW=1000H=200L=[[0for_inrange(W)]for_inrange(H)]# full or airdefs2li(s,sep=','):returnlist(map(int,s.split(sep)))MAX_Y=0forlinsys.stdin.read().splitlines():lp=l.split(" -> ")forf,tinzip(lp,lp[1:]):(a,b,c,d)=(*s2li(f),*s2li(t))x0=min(a,c)y0=min(b,d)x1=max(a,c)y1=max(b,d)MAX_Y=max(MAX_Y,y1)forxinrange(x0,x1+1):foryinrange(y0,y1+1):L[y][x]=1forxinrange(W):L[MAX_Y+2][x]=1# rock on the groundstop=FalseN=0whilenotstop:N+=1y=0x=500more=True# can all left or right whilemoreandnotstop:more=FalsewhileL[y][x]==0:#and not stop: # if only airy+=1stop=y==MAX_Y+2ifL[y][x-1]==0:# can fall leftx-=1more=TrueelifL[y][x+1]==0:# can fall rightx+=1more=Trueelse:stop=y==1# can't put more sandL[y-1][x]=2# mark sandprint(N)
Et une jolie nimage de la caverne remplie de sable:
# python, vite fait bien fait
Posté par steph1978 . En réponse au message Avent du Code, jour 14. Évalué à 4.
Le parsing de l'input est presque plus long à écrire que l'application de règles : 4 boucles
forimbriquées et 4splitcontre 3 boucleswhileimbriquées.Voici mon code pour la partie deux. La partie est identique excepté la condition de sortie.
Et une jolie nimage de la caverne remplie de sable: