Coverage for Day3 / part1.py: 100%

14 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 : 3 

8Part : 1 

9 

10Ce script identifie les deux digits à conserver dans chaque ligne afin de  

11former le plus grand nombre possible selon la logique originale de la Part 1 : 

12- On identifie le plus grand digit (sauf le dernier), 

13- Puis on cherche le plus grand digit restant après l'index de celui-ci, 

14- Le joltage est la concaténation de ces deux chiffres. 

15 

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

17""" 

18 

19# %% ======================================================================== 

20# Imports 

21 

22# =========================================================================== 

23 

24# %% ======================================================================== 

25# Input data 

26def get_input(day: int = 1, example: bool = False) -> list: 

27 """ 

28 Lit le fichier d'input pour le jour donné. 

29 

30 :param day: numéro du jour AOC 

31 :param example: si True, utilise le fichier example.txt sinon input.txt 

32 :return: liste de lignes du fichier 

33 :rtype: list 

34 """ 

35 file = 'example.txt' if example else 'input.txt' 

36 with open(f"./Day{day}/{file}", 'r', encoding='utf-8') as f: 

37 return f.readlines() 

38 

39# =========================================================================== 

40 

41# %% ======================================================================== 

42# Résolution 

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

44 """ 

45 Calcule le joltage total de toutes les lignes selon la règle de la Part 1 : 

46  

47 Pour chaque ligne : 

48 ------------------- 

49 - On convertit chaque caractère en digit. 

50 - On cherche le plus grand digit parmi tous sauf le dernier. 

51 - On récupère son index. 

52 - À partir de ce point, on cherche le plus grand digit restant. 

53 - On concatène les deux digits trouvés. 

54 - On ajoute cette valeur au joltage total. 

55 

56 :param data: Liste brute des lignes d’input. 

57 :return: Joltage total. 

58 :rtype: int 

59 """ 

60 joltage: int = 0 

61 

62 for line in data: 

63 # Nettoie la ligne (retire \n, espaces) 

64 line = line.strip() 

65 

66 # Convertit la ligne en liste de digits 

67 digits = [int(d) for d in line] 

68 

69 # Premier digit : le maximum dans tous les digits SAUF le dernier 

70 first_digit = str(max(digits[:-1])) 

71 

72 # Position du premier digit dans la liste, puis on avance d'un cran 

73 index = digits.index(int(first_digit)) + 1 

74 

75 # Second digit : le maximum dans la partie restante à droite 

76 second_digit = str(max(digits[index:])) 

77 

78 # Ajout au cumul du joltage 

79 joltage += int(first_digit + second_digit) 

80 

81 return joltage 

82 

83# =========================================================================== 

84 

85# %% 

86if __name__ == "__main__": 

87 RESULT = solve(get_input(3, False)) 

88 

89 print("\n" + "═" * 60) 

90 print(" 🔐 Advent of Code 2025 — Day 3 | Part 1".center(60)) 

91 print("═" * 60) 

92 print(f"Joltage trouvé : \033[96m{RESULT}\033[0m") 

93 print("═" * 60 + "\n") 

94