• # Jour 7

    Posté par . En réponse au journal Advent of Code 2025. Évalué à 2.

    Rien de bien complique ajd, mais j'ai quand meme perdu un peu de temps sur la premiere partie, faute de tenir compte du fait qu'un splitter devait voir passer un beam pour etre active... Ce qui donne

    from typing import Iterable, NamedTuple
    class Position(NamedTuple):
     x: int
     y: int
    class Manifolder:
     def __init__(self, data: list[str]) -> None:
     self.grid = data
     self.height = len(self.grid)
     self.width = len(self.grid[0])
     def is_divider(self, pos: Position) -> bool:
     return self.grid[pos.y][pos.x] == '^'
     def divisions(self) -> Iterable[int]:
     beams = {self.grid[0].index('S')}
     for y in range(2, self.height, 2):
     splitters = [p for p in map(lambda x: Position(x, y), range(self.width)) if self.is_divider(p) and p.x in beams]
     beams |= {p.x-1 for p in splitters}
     beams |= {p.x+1 for p in splitters}
     beams -= {p.x for p in splitters}
     yield len(splitters)
     def timelines(self) -> int:
     timelines = { i: int(self.grid[0][i] == 'S') for i in range(self.width)}
     for y in range(2, self.height, 2):
     splitters = [p for p in map(lambda x: Position(x, y), range(self.width)) if self.is_divider(p) and p.x in timelines.keys()]
     for s in splitters:
     v = timelines[s.x]
     timelines[s.x] = 0
     timelines[s.x-1] += v
     timelines[s.x+1] += v
     return sum(timelines.values())
    def exo1(data: list[str]) -> int:
     return sum(Manifolder(data).divisions())
    def exo2(data: list[str]) -> int:
     return Manifolder(data).timelines()

    ++
    Gi)