◂ 16 décembre 2022 ▸
Proboscidea Volcanium : Ouvrir des vannes dans un réseaux dans l'ordre optimal
Valve RO has flow rate=5; tunnels lead to valves NO, FD, QV, BV
Valve GT has flow rate=0; tunn …
⋮
- graphe.png
- code.py
- codePartie1_ancienAlgo.py
- codePartie2_tropLent.py
### Partie 1 uniquement, trop lent pour adapter en partie 2, même si le défi est intéressant
from functools import cache
f = open("input.txt", 'r')
lines = [line[:-1] for line in f.readlines()]
START = 'AA'
TEMPS = 30
VANNES = []
debits = []
for line in lines:
tokens = line.split()
vanne = tokens[1]
debit = int(tokens[4][5:-1])
VANNES.append(vanne)
debits.append(debit)
debits = tuple(debits)
tunnels = []
for line in lines:
tokens = line.split()
vanne = tokens[1]
vannesTunnels = list(map(lambda s:VANNES.index(s), map(lambda s: s[-1]==',' and s[:-1] or s, tokens[9:])))
tunnels.append(vannesTunnels)
@cache
def meilleurDebit(position, debits, tempsRestant, comeFrom=None):
if tempsRestant <= 0:
return 0
meilleur = 0
# pas tourner vanne
for acces in tunnels[position]:
if acces == comeFrom:
continue
meilleur = max(meilleur, meilleurDebit(acces, debits, tempsRestant - 1, position))
# tourner vanne
if debits[position] != 0:
debitSupplementaire = debits[position] * (tempsRestant-1)
debits = list(debits[:])
debits[position] = 0 # ne pas rouvrir la vanne plus tard
debits = tuple(debits)
for acces in tunnels[position]:
meilleur = max(meilleur, debitSupplementaire + meilleurDebit(acces, debits, tempsRestant - 2))
return meilleur
print("Réponse partie 1:", meilleurDebit(VANNES.index(START), debits, TEMPS))