from math import sqrt, floor, ceil def do_task(input): lines = input.split("\n") time = int("".join(lines[0].split()[1:])) distance = int("".join(lines[1].split()[1:])) a = -1 b = time c = -distance max_h = (-b - sqrt(b**2 - 4 * a * c)) / (2 * a) min_h = (-b + sqrt(b**2 - 4 * a * c)) / (2 * a) + 1 return ceil(max_h) - floor(min_h) # Kind of slow, but workable def do_task_the_dumb_way(input): lines = input.split("\n") time = int("".join(lines[0].split()[1:])) distance = int("".join(lines[1].split()[1:])) ways = 0 for h in range(time): d = (time - h) * h # This is how dumb you have to make it to make it run slow # for t in range(time - h): # d+=h if d > distance: ways += 1 return ways with open("day06/data/input100.txt") as infile: result = do_task(infile.read()) print(result) print(result == 71503) with open("day06/data/input101.txt") as infile: result = do_task(infile.read()) print(result) print(result == 42948149)