Coverage for Day9 / part1.py: 100%

21 statements  

« 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 -*- 

3 

4""" 

5Advent Of Code 2025 

6=================== 

7Day : 9 

8Part : 1 

9 

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. 

13 

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| 

17 

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. 

24 

25La complexité est O(n²), ce qui reste acceptable pour les tailles 

26de données de l’énoncé. 

27 

28.. codeauthor:: Alexandre Condette <alexandre.condette@wanadoo.fr> 

29""" 

30 

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é. 

36 

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] 

44 

45# =========================================================================== 

46 

47# %% ======================================================================== 

48# Résolution 

49def solve(data: list) -> int: 

50 """ 

51 Calcule la plus grande aire de rectangle formé par deux points. 

52 

53 :param data: lignes contenant "x,y" 

54 :return: aire maximale 

55 """ 

56 points = [] 

57 

58 # Parsing des coordonnées 

59 for line in data: 

60 x, y = map(int, line.split(',')) 

61 points.append((x, y)) 

62 

63 n = len(points) 

64 best = 0 

65 

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] 

71 

72 width = abs(x2 - x1) + 1 

73 height = abs(y2 - y1) + 1 

74 

75 area = width * height 

76 

77 if area > best: 

78 best = area 

79 

80 return best 

81 

82# =========================================================================== 

83 

84# %% 

85if __name__ == "__main__": 

86 RESULT = solve(get_input(9, False)) # True pour example, False pour input réel 

87 

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")