Day 20 - Advent of Code 2022

Working solutions for the day 20 puzzles.

Part One

""" day_20_01.py """

# usage: python3 day_20_01.py < input


import sys


def parse(data):
    """ create object """
    return [(i, int(j)) for i, j in enumerate(data.splitlines())]


numbers = parse(sys.stdin.read())
size = len(numbers)

for item, move in numbers.copy():
    pos = numbers.index((item, move))
    numbers.remove((item, move))
    at = (pos + move) % (size - 1)
    numbers.insert(at, (item, move))

zero = [i for _, i in numbers].index(0)
print(sum([numbers[(zero + i) % size][1] for i in [1000, 2000, 3000]]))

Part Two

""" day_20_02.py """

# usage: python3 day_20_02.py < input


import sys


def parse(data):
    """ create object """
    key = 811589153
    return [(i, int(j) * key) for i, j in enumerate(data.splitlines())]


numbers = parse(sys.stdin.read())
size = len(numbers)
order = numbers.copy()

for _ in range(10):
    for item, move in order:
        pos = numbers.index((item, move))
        numbers.remove((item, move))
        at = (pos + move) % (size - 1)
        numbers.insert(at, (item, move))

zero = [i for _, i in numbers].index(0)
print(sum([numbers[(zero + i) % size][1] for i in [1000, 2000, 3000]]))