◂ 4 décembre 2023 ▸
Scratchcards : Trouver des nombres gagnants sur des cartes à gratter et gagner de nouvelles cartes
Card 1: 33 56 23 64 92 86 94 7 59 13 | 86 92 64 43 10 70 16 55 79 33 56 8 7 25 82 14 31 …
Card 2: 61 66 75 1 27 38 93 90 34 43 | 94 46 …
⋮
- code1.py
- code2.py
- code2_optim.py
f = open("input.txt", 'r', encoding='utf-8')
lines = [line[:-1] for line in f.readlines()]
def nb_num_gagnants(line:str) -> int :
tokens = line.split()
sep_indice = tokens.index('|')
tirage: set[int] = set(map(int, tokens[2:sep_indice]))
coches: set[int] = set(map(int, tokens[sep_indice+1:]))
return len(tirage.intersection(coches))
# Créer la liste des indices (et non numéro !) des cartes gagnées pour chaque carte
indices_gains: list[tuple[int,...]] = []
num_indice = -1
for line in lines:
num_indice += 1
nb_ok = nb_num_gagnants(line)
indices_gains.append(tuple(range(num_indice + 1, num_indice + nb_ok + 1)))
# Compter les cartes gagnantes, de façon récursive
nb_cartes = 0
indices_cartes: list[int] = list(range(len(indices_gains)))
while len(indices_cartes) > 0:
nb_cartes += 1
indices_cartes.extend(indices_gains[indices_cartes.pop()])
print("Réponse partie 2:", nb_cartes)