-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path20.py
55 lines (47 loc) · 1.27 KB
/
20.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
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from aoccommon import *
numbers_list = list()
num_count = 0
with open('20.input', 'r') as f:
while l:=f.readline():
numbers_list.append((int(l.strip()), num_count,))
num_count += 1
def find(pos):
for idx, item in enumerate(numbers_list):
if item[1] == pos:
return idx
def mix():
for pos in range(num_count):
idx = find(pos)
#print(f'Moving number at position {pos} currently at {idx}')
item = numbers_list.pop(idx)
shift = item[0]
new_pos = idx + shift
new_pos %= (num_count -1)
if new_pos > 0:
numbers_list.insert(new_pos, item)
else:
numbers_list.append(item)
#print(f'Number {item} new position {new_pos} into {list(map(lambda x: x[0], numbers_list))}')
#print('New list', list(map(lambda x: x[0], numbers_list)))
print('New list', list(map(lambda x: x[0], numbers_list)))
result_sum = 0
part2 = True
if part2:
key = 811589153
for i in range(num_count):
numbers_list[i] = (numbers_list[i][0] * key, numbers_list[i][1],)
for _ in range(9):
print('Mixing')
mix()
mix()
idx0 = 0
for idx in range(len(numbers_list)):
if numbers_list[idx][0] == 0:
print('0 at', idx)
idx0 = idx
break
for i in [1000, 2000, 3000]:
result_sum += numbers_list[(idx0 + i) % num_count][0]
print('Result:', result_sum)