Advent of code

 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 
   
                                               
  1. code1.py
  2. code2.py
  3. 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()  # not the same as 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))
    
nb_pts = 0

for line in lines:
    nb_ok = nb_num_gagnants(line)
    nb_pts += int(2**(nb_ok-1))  # int pour avoir 0pt si nb_ok=0 au lieu de 0.5pt


print("Réponse partie 1:", nb_pts)