◂ 7 décembre 2025 ▸
Laboratories : Faire se séparer des chemins et compter le nombre de façons récursivement
.. … .......S......... … ..
.. … ................. … ..
.. … .......^......... … ..
.. … ................. … ..
.. … ......^.^........ … ..
.. … ................. … ..
.. … .....^...^....... … ..
.. … ................. … ..
.. … ....^.^.^.^...... … ..
⋮
.. … .^...^...^.^.^.^. … ..
⋮
L'input représente un sapin de 142 lignes de longueur 141, mais avec une ligne sur deux remplie uniquement de points et inutiles dans les calculs.
La partie 2, sans memoization, partirait façon exponentielle avec plus de 2^1750 appels.
Le plus simple est de calculer la réponse à la partie 1 via une variable globale, mais ce n'est pas très beau.
Une version plus propre, mais plus lente, est donnée dans code1_2_noGlobal.py.
- code1.py
- code1_2.py
- code1_2_noGlobal.py
lines = []
with open('input.txt', 'r', encoding='utf-8') as f:
lines = [line.strip() for line in f.readlines()]
### suppress useless lines
#lines = lines[::2] # if you trust the pattern
lines = lines[0:1] + [line for line in lines[1:] if '^' in line] # if you don't
rep1 = 0
positions = set([lines[0].index('S')])
for line in lines:
new_positions = set()
for p in positions:
if line[p] == '.':
new_positions.add(p)
else:
new_positions.add(p-1)
new_positions.add(p+1)
rep1 += 1
positions = new_positions
print("Réponse partie 1:", rep1)