Mon premier parcours est moins bourrin, je ne cherche pas à savoir pour chaque arbre s'il est visible, mais bien à noter les arbres vus depuis chaque angle de vue, donc au lieu d'avoir size=width*height traitements, j'en ai 2*(width+height).
defcheck(rows,cols):h=-1forrinrows:forcincols:ifinput[r][c]>h:visible[r*width+c]=Trueh=input[r][c]visible=[Falsefor_inrange(size)]forrinrange(height):check([r],range(width))check([r],range(width-1,-1,-1))forcinrange(width):check(range(height),[c])check(range(height-1,-1,-1),[c])print(f"Visible Trees : {sum(visible)}")
Pour la seconde partie c'est algorithmiquement équivalent :
deflook(h,rows,cols):n=0forrinrows:forcincols:n+=1ifinput[r][c]>=h:returnnreturnnscenic=[0for_inrange(size)]forrinrange(1,height-1):forcinrange(1,width-1):h=input[r][c]scenic[r*width+c]=(look(h,range(r-1,-1,-1),[c])# top*look(h,range(r+1,height),[c])# bottom*look(h,[r],range(c-1,-1,-1))# left*look(h,[r],range(c+1,width))# right)print(f"Best scenic tree : {max(scenic)}")
[^] # Re: python procédural, moche mais efficace
Posté par Yth (Mastodon) . En réponse au message Avent du Code, jour 8. Évalué à 3.
Mon premier parcours est moins bourrin, je ne cherche pas à savoir pour chaque arbre s'il est visible, mais bien à noter les arbres vus depuis chaque angle de vue, donc au lieu d'avoir
size=width*heighttraitements, j'en ai2*(width+height).Pour la seconde partie c'est algorithmiquement équivalent :