-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathday09.py
executable file
·78 lines (51 loc) · 1.42 KB
/
day09.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/usr/bin/env python3
from utils import advent
import sys
from blist import blist
advent.setup(2018, 9)
fin = advent.get_input()
##################################################
s = fin.read().split()
nplayers, last_marble = int(s[0]), int(s[6])
marbles = blist([0])
cur_marble = 0
cur_idx = 0
cur_player = 1
scores = {}
# nplayers = 10
# last_marble = 1618
for i in range(1, nplayers+1):
scores[i] = 0
while cur_marble < last_marble:
cur_marble += 1
# sys.stdout.write(str(cur_marble) + '\r')
if cur_marble % 23 != 0:
cur_idx = (cur_idx + 1) % len(marbles) + 1
marbles.insert(cur_idx, cur_marble)
else:
cur_idx = (cur_idx - 7) % len(marbles)
points = cur_marble + marbles.pop(cur_idx)
scores[cur_marble % nplayers + 1] += points
# print('\n>>>', cur_marble, points, last_marble)
winner_score = max(scores.values())
advent.submit_answer(1, winner_score)
marbles = blist([0])
cur_marble = 0
cur_idx = 0
cur_player = 1
scores = {}
last_marble *= 100
for i in range(1, nplayers+1):
scores[i] = 0
while cur_marble < last_marble:
cur_marble += 1
# sys.stdout.write(str(cur_marble) + '\r')
if cur_marble % 23 != 0:
cur_idx = (cur_idx + 1) % len(marbles) + 1
marbles.insert(cur_idx, cur_marble)
else:
cur_idx = (cur_idx - 7) % len(marbles)
points = cur_marble + marbles.pop(cur_idx)
scores[cur_marble % nplayers + 1] += points
winner_score = max(scores.values())
advent.submit_answer(2, winner_score)