|
| 1 | +with open("input", "r") as input_file: |
| 2 | + input_lines: [str] = [a.strip() for a in input_file.read().strip().split("\n")] |
| 3 | + |
| 4 | +card_map: dict[int, (list[int], list[int])] = {} |
| 5 | +for input_line in input_lines: |
| 6 | + id_part, card = input_line.split(": ") |
| 7 | + card_id = int(id_part.split()[1]) |
| 8 | + |
| 9 | + winner_str, owned_str = card.split(" | ") |
| 10 | + winners: [int] = [int(a) for a in winner_str.split()] |
| 11 | + owneds: [int] = [int(a) for a in owned_str.split()] |
| 12 | + |
| 13 | + card_map[card_id] = (winners, owneds) |
| 14 | + |
| 15 | +win_map: dict[int, list[int]] = {} |
| 16 | +for card_id in card_map.keys(): |
| 17 | + card: ([int], [int]) = card_map[card_id] |
| 18 | + |
| 19 | + winnerc: int = 0 |
| 20 | + for winning in card[0]: |
| 21 | + if winning in card[1]: |
| 22 | + winnerc += 1 |
| 23 | + |
| 24 | + won_clones: [int] = [] |
| 25 | + for i in range(winnerc): |
| 26 | + won_clones.append(card_id + i + 1) |
| 27 | + win_map[card_id] = won_clones |
| 28 | + |
| 29 | +owned_cards: dict[int, int] = dict([(i, 1) for i in card_map.keys()]) |
| 30 | +for card_id in card_map.keys(): |
| 31 | + for won_clone_id in win_map[card_id]: |
| 32 | + owned_cards[won_clone_id] += owned_cards[card_id] |
| 33 | + |
| 34 | +solution: int = sum(owned_cards.values()) |
| 35 | +print(f"SOLVE: {solution}") |
0 commit comments