◂ 11 décembre 2025 ▸
Reactor : Trouver le nombre de chemins dans un graphe orienté, avec deux points de passage obligés
- code.py
from functools import lru_cache
outputs = {}
with open('input.txt', 'r', encoding='utf-8') as f:
for line in f.readlines():
tokens = line.strip().split()
outputs[tokens[0][:-1]] = tokens[1:]
@lru_cache
def compter(pos, to='out'):
if pos == to:
return 1
return sum(compter(v, to) for v in outputs.get(pos, [])) # ou outputs[pos] si outputs = collections.defaultdict(list)
### Partie 1 ###
print("Réponse partie 1:", compter('you'))
### Partie 2 ###
rep2 = compter('svr', 'fft') * compter('fft', 'dac') * compter('dac', 'out') \
+ compter('svr', 'dac') * compter('dac', 'fft') * compter('fft', 'out')
print("Réponse partie 2:", rep2)
#### Partie 2 optimisée, mais aucun besoin au vu de la rapidité du code précédent: ####
rep2 = 0
for stop1, stop2 in (('fft', 'dac'), ('dac', 'fft')):
nb_intermed = compter(stop1, stop2)
if nb_intermed:
rep2 += compter('svr', stop1) * nb_intermed * compter(stop2, 'out')
print("Réponse partie 2:", rep2)