• # C'était trop simple... je suspecte un piège !

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

    Ma solution en Python :

    #!/bin/python3
    maxvalues = {
     "red":12,
     "green":13,
     "blue":14,
    }
    def number(game):
     return int(game.split(":")[0][5:])
    def possible(game):
     gamelist = game.split(":")[1].split(";")
     for g in gamelist:
     colorlist = g.split(",")
     for c in colorlist:
     n = int(c.split(" ")[1])
     color = c.split(" ")[2]
     if n > maxvalues[color]:
     return False
     return True
    def power(game):
     minimum = {
     "red":0,
     "green":0,
     "blue":0,
     }
     gamelist = game.split(":")[1].split(";")
     for g in gamelist:
     colorlist = g.split(",")
     for c in colorlist:
     n = int(c.split(" ")[1])
     color = c.split(" ")[2]
     if n > minimum[color]:
     minimum[color] = n
     return minimum["red"]*minimum["blue"]*minimum["green"]
    def solve1(testinput,testing=False):
     s = 0
     for line in testinput:
     if line == "" :
     continue
     p = possible(line)
     if testing:
     print(line, "=", p, ";Number=", number(line))
     if p:
     s += number(line)
     if testing:
     print(s)
     return s
    def solve2(testinput,testing=False):
     s = 0
     for line in testinput:
     if line == "" :
     continue
     p = power(line)
     if testing:
     print(line, ";Power=", p)
     s += p
     if testing:
     print(s)
     return s
    test1 = """Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green
    Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue
    Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red
    Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red
    Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green"""
    result1 = 8
    test2 = test1
    result2 = 2286
    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()

    C'était presque simple aujourd'hui, c'est suspect.

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