Un parcours de graph avec la complication que l'état du graph change pendant le parcours.
J'ai procédé en brute force et n'ai pas trouvé vraiment de moyen de couper des branches, si ce n'est marquer dès le départ les vannes à 0 comme étant déjà ouverte. Ça marchait bien jusqu'à 20 de profondeur mais passé ça, ça ramait trop (je timeout à 10 min). J'ai donc ajouté du cache et bim, 0.37s et 91MB de cache.
Cependant cette solution ne passe pas à l'échelle pour le parcours à 2 qui multiplie les branches.
J'ai ouïe dire des solutions où on pré-calcul des distances ou des scores mais je crois que je vais en rester là, j'ai déjà un retard de deux jours. J'ai atteint ma limite.
part 1
importsysimportrepat=re.compile('Valve ([A-Z]{2}) has flow rate=([0-9]+); tunnels? leads? to valves? ([ ,A-Z]+)')P=dict()fori,linenumerate(sys.stdin.read().splitlines()):g=pat.search(l)p=int(g[2])P[g[1]]=(i,p,g[3].split(", "))STEPS=int(sys.argv[1])ALLO=0for_,(i,p,_)inP.items():ifp==0:ALLO=ALLO|(1<<i)cache={}defstep(pos="AA",left=STEPS,opens=ALLO):ifleft<=0:return0key=(pos,left,opens)r=cache.get(key,-1)ifr>=0:returnr(i,p,nh)=P[pos]is_open=opens&(1<<i)a=0ifnotis_open:# also means 0 - worth opening valve ?left-=1# cost to openopens=opens|(1<<i)a=p*(left+30-STEPS)+max(step(n,left-1,opens)forninnh)b=max(step(n,left-1,opens)forninnh)r=max(a,b)cache[key]=rreturnrprint(step())
# python caché
Posté par steph1978 . En réponse au message Avent du Code jour 16. Évalué à 2.
Un parcours de graph avec la complication que l'état du graph change pendant le parcours.
J'ai procédé en brute force et n'ai pas trouvé vraiment de moyen de couper des branches, si ce n'est marquer dès le départ les vannes à 0 comme étant déjà ouverte. Ça marchait bien jusqu'à 20 de profondeur mais passé ça, ça ramait trop (je timeout à 10 min). J'ai donc ajouté du cache et bim, 0.37s et 91MB de cache.
Cependant cette solution ne passe pas à l'échelle pour le parcours à 2 qui multiplie les branches.
J'ai ouïe dire des solutions où on pré-calcul des distances ou des scores mais je crois que je vais en rester là, j'ai déjà un retard de deux jours. J'ai atteint ma limite.
part 1