Coverage for Day9 / part1.py: 100%
21 statements
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-12 09:47 +0000
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-12 09:47 +0000
1#! /usr/bin/env python
2# -*- coding: utf-8 -*-
4"""
5Advent Of Code 2025
6===================
7Day : 9
8Part : 1
10Ce script recherche la plus grande surface de rectangle axis-aligné
11que l’on peut former à partir de deux tuiles rouges utilisées comme
12coins opposés.
14Chaque ligne de l’input fournit une coordonnée "x,y".
15Deux points définissent un rectangle dont l’aire vaut :
16 aire = |dx| * |dy|
18La solution :
19-------------
20- lit toutes les coordonnées,
21- parcourt toutes les paires de points,
22- calcule l’aire associée,
23- conserve la plus grande.
25La complexité est O(n²), ce qui reste acceptable pour les tailles
26de données de l’énoncé.
28.. codeauthor:: Alexandre Condette <alexandre.condette@wanadoo.fr>
29"""
31# %% ========================================================================
32# Lecture de l’input
33def get_input(day: int = 1, example: bool = False) -> list:
34 """
35 Lit le fichier d'entrée pour le jour demandé.
37 :param day: numéro du jour AoC
38 :param example: True → example.txt, False → input.txt
39 :return: liste de lignes sans fin de ligne
40 """
41 file = 'example.txt' if example else 'input.txt'
42 with open(f"./Day{day}/{file}", 'r', encoding='utf-8') as f:
43 return [line.rstrip('\n') for line in f]
45# ===========================================================================
47# %% ========================================================================
48# Résolution
49def solve(data: list) -> int:
50 """
51 Calcule la plus grande aire de rectangle formé par deux points.
53 :param data: lignes contenant "x,y"
54 :return: aire maximale
55 """
56 points = []
58 # Parsing des coordonnées
59 for line in data:
60 x, y = map(int, line.split(','))
61 points.append((x, y))
63 n = len(points)
64 best = 0
66 # Test de toutes les paires
67 for i in range(n):
68 x1, y1 = points[i]
69 for j in range(i + 1, n):
70 x2, y2 = points[j]
72 width = abs(x2 - x1) + 1
73 height = abs(y2 - y1) + 1
75 area = width * height
77 if area > best:
78 best = area
80 return best
82# ===========================================================================
84# %%
85if __name__ == "__main__":
86 RESULT = solve(get_input(9, False)) # True pour example, False pour input réel
88 print("\n" + "═" * 60)
89 print(" 🔐 Advent of Code 2025 — Day 9 | Part 1".center(60))
90 print("═" * 60)
91 print(f"Résultat : \033[96m{RESULT}\033[0m")
92 print("═" * 60 + "\n")