Day 6
Started working out a formula to math this, but gave up and let the computer do it.
This commit is contained in:
parent
71309f3672
commit
4ca74a8e4c
2
d06/input.txt
Normal file
2
d06/input.txt
Normal file
@ -0,0 +1,2 @@
|
||||
Time: 54 81 70 88
|
||||
Distance: 446 1292 1035 1007
|
88
d06/main.py
Normal file
88
d06/main.py
Normal file
@ -0,0 +1,88 @@
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
class Boat:
|
||||
def __init__(self, starting_speed: int, acceleration: int):
|
||||
self.start_speed = starting_speed
|
||||
self.acc = acceleration
|
||||
|
||||
def hold(self, hold_time: int, time_limit: int) -> int:
|
||||
return (time_limit - hold_time) * ((self.acc * hold_time) + self.start_speed)
|
||||
|
||||
|
||||
def part1(input: Path) -> int:
|
||||
# Boat properties
|
||||
start_speed = 0
|
||||
acc = 1
|
||||
|
||||
boat = Boat(start_speed, acc)
|
||||
|
||||
with input.open() as f:
|
||||
times = [int(v) for v in next(f).split()[1:]]
|
||||
dists = [int(v) for v in next(f).split()[1:]]
|
||||
|
||||
answer = 1
|
||||
for time_limit, target_distance in zip(times, dists):
|
||||
times = [
|
||||
hold_time
|
||||
for hold_time in range(0, time_limit)
|
||||
if boat.hold(hold_time, time_limit) > target_distance
|
||||
]
|
||||
answer *= len(times)
|
||||
|
||||
return answer
|
||||
|
||||
|
||||
def solve_calculus():
|
||||
# Gave up on this. Been too long since I studied linear algebra
|
||||
|
||||
# Boat properties
|
||||
start_speed = 0
|
||||
acc = 1
|
||||
|
||||
# Round properties
|
||||
time_limit = 7
|
||||
target_distance = 9
|
||||
|
||||
# Variable
|
||||
hold_time = 1
|
||||
|
||||
# Formula
|
||||
# Curve
|
||||
d = (time_limit - hold_time) * ((acc * hold_time) + start_speed)
|
||||
# Line
|
||||
d = target_distance
|
||||
|
||||
target_distance = (time_limit - hold_time) * ((acc * hold_time) + start_speed)
|
||||
|
||||
return d
|
||||
|
||||
|
||||
def part2(input: Path) -> int:
|
||||
# Boat properties
|
||||
start_speed = 0
|
||||
acc = 1
|
||||
|
||||
boat = Boat(start_speed, acc)
|
||||
|
||||
with input.open() as f:
|
||||
time_limit = int("".join([v for v in next(f).split()[1:]]))
|
||||
target_distance = int("".join([v for v in next(f).split()[1:]]))
|
||||
|
||||
times = [
|
||||
hold_time
|
||||
for hold_time in range(0, time_limit)
|
||||
if boat.hold(hold_time, time_limit) > target_distance
|
||||
]
|
||||
|
||||
return len(times)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# input = Path("sample.txt")
|
||||
input = Path("input.txt")
|
||||
result1 = part1(input)
|
||||
print(f"part1 {result1}")
|
||||
|
||||
result2 = part2(input)
|
||||
print(f"part2 {result2}")
|
2
d06/sample.txt
Normal file
2
d06/sample.txt
Normal file
@ -0,0 +1,2 @@
|
||||
Time: 7 15 30
|
||||
Distance: 9 40 200
|
Loading…
Reference in New Issue
Block a user