• # Python et math

    Posté par . En réponse au message Advent of Code 2023, day 6. Évalué à 1.

    Très clairement un exos de math qui pourrait être donné à des secondes, il fallait que ça tombe le jour où je n'avais pas le temps avant le soir.
    Ma solution :

    #!/bin/python3
    from math import sqrt
    def parse_input(puzzle):
     return [[int(i) for i in puzzle[0].split(":")[1].split()], [int(i) for i in puzzle[1].split(":")[1].split()]]
    def parse_input2(puzzle):
     time = int(''.join(puzzle[0].split(":")[1].split()))
     dist = int(''.join(puzzle[1].split(":")[1].split()))
     return [time,dist]
    def solve_equ(time,dist):
     x1 = int((time-sqrt(time**2-4*dist))/2)+1
     x2 = (time+sqrt(time**2-4*dist))/2
     if int(x2) == x2:
     x2 = int(x2)-1
     else:
     x2 = int(x2)
     return [x1,x2]
    def solve1(puzzle,testing=False):
     s=0
     game = parse_input(puzzle)
     sol = []
     for i,t in enumerate(game[0]):
     p = solve_equ(t,game[1][i])
     sol.append(p[1]-p[0]+1)
     s=sol[0]
     for n in sol[1:]:
     s *= n
     if testing:
     print(s)
     return s
    def solve2(puzzle,testing=False):
     s = 0
     game = parse_input2(puzzle)
     p = solve_equ(game[0],game[1])
     s = p[1]-p[0]+1
     if testing:
     print(s)
     return s
    test1 = """Time: 7 15 30
    Distance: 9 40 200"""
    result1 = 288
    test2 = test1
    result2 = 71503
    # for cli invocation
    def solve(short=False,one=True,two=True):
     s1, s2 = False , False
     if one:
     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)
     if two:
     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
     s = False
     one = True
     two = True
     if len(argv) >= 2:
     if "-s" in argv or "--summary" in argv or "--short" in argv:
     s = True
     if "1" in argv:
     two = False
     one = True
     elif "2" in argv:
     one = False
     two = True
     if "2" in argv:
     two = True
     solve(short=s,one=one,two=two)

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