Day 666
parent
35a81a2b7f
commit
d9239bbb82
@ -0,0 +1,2 @@
|
|||||||
|
Time: 7 15 30
|
||||||
|
Distance: 9 40 200
|
@ -0,0 +1,2 @@
|
|||||||
|
Time: 59 70 78 78
|
||||||
|
Distance: 430 1218 1213 1276
|
@ -0,0 +1,54 @@
|
|||||||
|
from math import sqrt, floor, ceil
|
||||||
|
|
||||||
|
|
||||||
|
def do_task(input):
|
||||||
|
lines = input.split("\n")
|
||||||
|
|
||||||
|
times = [int(t) for t in lines[0].split()[1:]]
|
||||||
|
distances = [int(d) for d in lines[1].split()[1:]]
|
||||||
|
|
||||||
|
prod = 1
|
||||||
|
|
||||||
|
for i in range(len(times)):
|
||||||
|
a = -1
|
||||||
|
b = 1 + times[i] - 1
|
||||||
|
c = -distances[i]
|
||||||
|
|
||||||
|
max_h = (-b - sqrt(b**2 - 4 * a * c)) / (2 * a)
|
||||||
|
min_h = (-b + sqrt(b**2 - 4 * a * c)) / (2 * a) + 1
|
||||||
|
|
||||||
|
prod *= ceil(max_h) - floor(min_h)
|
||||||
|
|
||||||
|
return prod
|
||||||
|
|
||||||
|
# This actually works
|
||||||
|
def do_task_the_dumb_way(input):
|
||||||
|
lines = input.split("\n")
|
||||||
|
|
||||||
|
times = [int(t) for t in lines[0].split()[1:]]
|
||||||
|
distances = [int(d) for d in lines[1].split()[1:]]
|
||||||
|
|
||||||
|
prod = 1
|
||||||
|
|
||||||
|
for i in range(len(times)):
|
||||||
|
ways = 0
|
||||||
|
for h in range(times[i]):
|
||||||
|
d = 0
|
||||||
|
for t in range(times[i] - h):
|
||||||
|
d += h
|
||||||
|
if d > distances[i]:
|
||||||
|
ways += 1
|
||||||
|
prod *= ways
|
||||||
|
|
||||||
|
return prod
|
||||||
|
|
||||||
|
|
||||||
|
with open("day06/data/input100.txt") as infile:
|
||||||
|
result = do_task(infile.read())
|
||||||
|
print(result)
|
||||||
|
print(result == 288)
|
||||||
|
|
||||||
|
with open("day06/data/input101.txt") as infile:
|
||||||
|
result = do_task(infile.read())
|
||||||
|
print(result)
|
||||||
|
print(result == 227850)
|
@ -0,0 +1,47 @@
|
|||||||
|
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 = 1 + time - 1
|
||||||
|
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)
|
Loading…
Reference in New Issue