• # Python

    Posté par . En réponse au message Advent of Code 2023 : Day 1. Évalué à 1.

    Ma solution :

    #!/bin/python3
    replaces = {
     "one":1,
     "two":2,
     "three":3,
     "four":4,
     "five":5,
     "six":6,
     "seven":7,
     "eight":8,
     "nine":9,
    }
    def extract(word):
     fd = 0
     ld = 0
     for l in word:
     n = 0
     if l.isdigit():
     n = int(l)
     if n != 0:
     if fd == 0:
     fd = n
     ld = n
     return fd*10+ld
    def digitalize(word):
     fd = 0
     ld = 0
     for i in range(len(word)):
     n = 0
     if word[i].isdigit():
     n = int(word[i])
     else:
     for k in replaces.keys():
     if word[i:].replace(k,str(replaces[k]))[0].isdigit():
     n = replaces[k]
     break
     if n != 0:
     if fd == 0:
     fd = n
     ld = n
     return fd*10+ld
    def solve1(testinput,testing=False):
     s = 0
     for line in testinput:
     d = extract(line)
     if testing:
     print(line, "=", d)
     s += d
     if testing:
     print(s)
     return s
    def solve2(testinput,testing=False):
     s = 0
     for line in testinput:
     d = digitalize(line)
     if testing:
     print(line, "=", d)
     s += d
     if testing:
     print(s)
     return s
    test1 = """1abc2
    pqr3stu8vwx
    a1b2c3d4e5f
    treb7uchetn"""
    result1 = 142
    test2 = """two1nine
    eightwothree
    abcone2threexyz
    xtwone3four
    4nineeightseven2
    zoneight234
    7pqrstsixtee"""
    result2 = 281
    def solve(short=False):
     print("----Part 1----")
     if short == False:
     if solve1(test1.split("\n"),testing=True) != result1:
     print("Not working.")
     return False
     else :
     print("Maybe working?")
     with open("input.txt",'r') as file:
     lines = file.read().split("\n")
     s1 = solve1(lines)
     print(s1)
     print("----Part 2----")
     if short == False:
     if solve2(test2.split("\n"),testing=True) != result2:
     print("Not working.")
     return False
     else :
     print("Maybe working?")
     with open("input.txt",'r') as file:
     lines = file.read().split("\n")
     s2 = solve2(lines)
     print(s2)
     return s1, s2
    if __name__ == "__main__":
     from sys import argv
     try:
     if argv[1] == "--summary" or argv[1] == "-s":
     solve(short=True)
     except IndexError:
     solve()

    Après quelques essais en remplaçant avant de traiter, je me suis rendu compte que le plus simple était de reprendre intégralement la logique de la partie 1 en vérifiant une chaine plutôt qu'un nombre.

    Et c'est plutôt propre.

    L'informatique n'est pas une science exacte, on n'est jamais à l'abri d'un succès