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