Advent of code 2015 solutions https://adventofcode.com/2015/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

14.py 970B

1234567891011121314151617181920212223242526272829
  1. #!/usr/bin/python
  2. import re
  3. from collections import defaultdict
  4. at = 2503
  5. pattern = re.compile('^(.*) can fly ([0-9]+) .*? for ([0-9]+) seconds, .* for ([0-9]+) seconds.')
  6. reindeer = {}
  7. with open('14.txt', 'r') as file:
  8. for line in file.readlines():
  9. name, speed, speed_period, rest_period = pattern.match(line).groups()
  10. reindeer[name] = (int(speed), int(speed_period), int(rest_period))
  11. def distance_at(reindeer_spec, time):
  12. speed, speed_period, rest_period = reindeer_spec
  13. cycle_period = speed_period + rest_period
  14. return speed * (speed_period * (time // cycle_period) + min(speed_period, time % cycle_period))
  15. print(max(distance_at(v, at) for v in reindeer.values()))
  16. points = defaultdict(int)
  17. for i in range(at):
  18. distances = {r[0]: distance_at(r[1], i + 1) for r in reindeer.iteritems()}
  19. for n in [n for n, d in distances.iteritems() if d == max(distances.values())]:
  20. points[n] += 1
  21. print(max(points.values()))