2022 Day 20 Python
This commit is contained in:
parent
c1f46f9fce
commit
51b30d3ed2
|
@ -0,0 +1,50 @@
|
|||
from helpers import *
|
||||
from collections import deque
|
||||
lines = read_day(20).split('\n')
|
||||
sample_lines = '''
|
||||
1
|
||||
2
|
||||
-3
|
||||
3
|
||||
-2
|
||||
0
|
||||
4
|
||||
'''.strip().split('\n')
|
||||
|
||||
|
||||
def mix(numbers: list[int], n=1):
|
||||
N = len(numbers)
|
||||
mix_order = numbers
|
||||
queue = deque(((i, x) for i,x in enumerate(numbers))) # mix_id, value
|
||||
for mix_pass in range(n):
|
||||
mixed_count = 0
|
||||
while mixed_count < N:
|
||||
v = queue.popleft()
|
||||
mix_id, value = v
|
||||
if mix_id == mixed_count:
|
||||
queue.insert(value % (N-1), v)
|
||||
mixed_count += 1
|
||||
else:
|
||||
queue.append(v)
|
||||
return [v for i,v in queue]
|
||||
|
||||
def p1(lines: list[str]) -> str:
|
||||
N = len(lines)
|
||||
numbers = [int(x) for x in lines]
|
||||
final_queue = mix(numbers)
|
||||
i = final_queue.index(0)
|
||||
values = (final_queue[(i+1000)%N], final_queue[(i+2000)%N], final_queue[(i+3000)%N])
|
||||
return f'coords: {values} have sum {sum(values)}'
|
||||
|
||||
def p2(lines: list[str]) -> str:
|
||||
N = len(lines)
|
||||
numbers = [int(x)*811589153 for x in lines]
|
||||
final_queue = mix(numbers, 10)
|
||||
i = final_queue.index(0)
|
||||
values = (final_queue[(i+1000)%N], final_queue[(i+2000)%N], final_queue[(i+3000)%N])
|
||||
return f'coords: {values} have sum {sum(values)}'
|
||||
|
||||
print(f'Part 1 (sample): {p1(sample_lines)}')
|
||||
print(f'Part 1: {p1(lines)}')
|
||||
print(f'Part 2 (sample): {p2(sample_lines)}')
|
||||
print(f'Part 2: {p2(lines)}')
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue