-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday23.py
61 lines (52 loc) · 1.01 KB
/
day23.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
import aoc
data = aoc.intlist(23, d="")
N, V = 1, 0
z = 9
c = [[1]]
r = [None, c[0]]
for i in range(1, z):
c.append([i+1])
r.append(c[-1])
c[i-1].append(c[i])
c[-1].append(c[0])
for i, j in enumerate(data):
c[i][V] = j
r[j] = c[i]
p = c[0]
for i in range(100):
m = p[N], p[N][N], p[N][N][N]
p[N] = p[N][N][N][N]
u = p[V] - 1 or z
while u in [j[V] for j in m]:
u = u - 1 or z
m[-1][N] = r[u][N]
r[u][N] = m[0]
p = p[N]
p = r[1][N]
s = ""
while p[V] != 1:
s += str(p[V])
p = p[N]
z = 1000000
c = [[1]]
r = [None, c[0]]
for i in range(1, z):
c.append([i+1])
r.append(c[-1])
c[i-1].append(c[i])
c[-1].append(c[0])
for i, j in enumerate(data):
c[i][V] = j
r[j] = c[i]
p = c[0]
for i in range(10000000):
m = p[N], p[N][N], p[N][N][N]
p[N] = p[N][N][N][N]
u = p[V] - 1 or z
while u in [j[V] for j in m]:
u = u - 1 or z
m[-1][N] = r[u][N]
r[u][N] = m[0]
p = p[N]
print(s, r[1][N][V] * r[1][N][N][V])
aoc.tock()