Day 14 - Advent of Code 2015
Working solutions for the day 14 puzzles.
Part One
""" day_14_01.py """
# usage: python3 day_14_01.py < input
import sys
def distance(vitals, elapsed):
""" calculate distance at elapsed time using vitals """
speed, sprint, rest = vitals
cycles, partial = divmod(elapsed, sprint + rest)
return speed * (cycles * sprint + min(partial, sprint))
greatest_distance = 0
for row in sys.stdin.read().splitlines():
items = row.split()
stats = [int(items[i]) for i in (3, 6, 13)]
greatest_distance = max(greatest_distance, distance(stats, 2503))
print(greatest_distance)
Part Two
""" day_14_02.py """
# usage: python3 day_14_02.py < input
import sys
def distance(vitals, elapsed):
""" calculate distance at elapsed time using vitals """
speed, sprint, rest = vitals
cycles, partial = divmod(elapsed, sprint + rest)
return speed * (cycles * sprint + min(partial, sprint))
reindeer = {}
for row in sys.stdin.read().splitlines():
items = row.split()
reindeer[items[0]] = [int(items[i]) for i in (3, 6, 13)]
points = {deer: 0 for deer in reindeer}
for i in range(2503):
positions = [(distance(stats, i + 1), deer)
for deer, stats in reindeer.items()]
leading = max(positions)[0]
for pos, deer in positions:
if pos == leading:
points[deer] += 1
print(max(points.values()))