Update 2015 solutions

This commit is contained in:
2024-10-20 15:19:25 -04:00
parent 87ab42743e
commit e73fa3bae7
16 changed files with 362 additions and 411 deletions

View File

@@ -1,53 +1,40 @@
import lib
data = open(0).read().strip()
from lib import get_data
from lib import ints, fst
from collections import defaultdict
part_1 = False
rds = []
max_dist = 0
gtime = 2503
rds = []
data = get_data(__file__).strip()
deers = []
for line in data.splitlines():
speed, time, rest = lib.str_to_ints(line)
rds.append([speed, time, rest, 0, 0, 0])
speed *= 1000
speed, time, rest = ints(line)
deers.append([0, speed, time, rest, time, 0])
dist = 0
ctime = 0
while ctime < gtime:
t = min(time, gtime - ctime)
dist += (speed * t)
ctime += time
ctime += rest
max_dist = max(dist, max_dist)
points = defaultdict(int)
for _ in range(2503):
max_dists = defaultdict(list)
for i, deer in enumerate(deers):
dist, speed, time, rest, time_left, rest_left = deer
if time_left > 0:
time_left -= 1
dist += speed
elif time_left == 0:
time_left = -1
rest_left = rest - 1
elif rest_left > 0:
rest_left -= 1
elif rest_left == 0:
time_left = time - 1
dist += speed
rest_left = -1
max_dists[dist].append(i)
if part_1:
print(max_dist // 1000)
deer[0] = dist
deer[4] = time_left
deer[5] = rest_left
scores = [0 for _ in range(len(rds))]
for _ in range(gtime):
for i in range(len(rds)):
speed, time, rest, dist, travel_time, rest_time = rds[i]
rd = rds[i]
if travel_time < time:
rd[3] += speed
rd[4] += 1
elif rest_time < rest:
rd[5] += 1
if rd[5] == rest:
rd[4] = 0
rd[5] = 0
max_deers = max(max_dists.items())
for di in max_deers[1]:
points[di] += 1
max_i = -1
max_v = 0
for i, rd in enumerate(rds):
if rd[3] > max_v:
max_i = i
max_v = rd[3]
for i, rd in enumerate(rds):
if rd[3] == max_v:
scores[i] += 1
if not part_1:
print(max(scores))
print(max(map(fst, deers)))
print(max(points.values()))