From 1e789404550dc5dc164ae69f2a7b0b22e4925ea8 Mon Sep 17 00:00:00 2001 From: Sebastian Seedorf Date: Wed, 30 Dec 2020 10:35:08 +0100 Subject: [PATCH] Day 23 --- day23/input.txt | 1 + day23/part1.py | 19 ++++++++++++++++++ day23/part2.py | 52 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+) create mode 100644 day23/input.txt create mode 100644 day23/part1.py create mode 100644 day23/part2.py diff --git a/day23/input.txt b/day23/input.txt new file mode 100644 index 0000000..128a58c --- /dev/null +++ b/day23/input.txt @@ -0,0 +1 @@ +952316487 diff --git a/day23/part1.py b/day23/part1.py new file mode 100644 index 0000000..d373b56 --- /dev/null +++ b/day23/part1.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python3 +from functools import reduce +from tqdm import tqdm + +num = [list(map(int, (char for char in x.strip()))) for x in open("input.txt")][0] + +for _ in tqdm(range(100)): + destination = num[0] + while True: + destination -= 1 + if destination == 0: + destination = 9 + if not destination in num[1:4]: + break + pos = num.index(destination) + num = num[4:pos+1] + num[1:4] + num[pos+1:] + num[0:1] + +pos = num.index(1) +print(reduce(lambda a, b: 10*a+b, num[pos+1:] + num[:pos], 0)) diff --git a/day23/part2.py b/day23/part2.py new file mode 100644 index 0000000..d23716e --- /dev/null +++ b/day23/part2.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 +from tqdm import tqdm + + +class Node: + value = None + next = None + + def __init__(self, value, next): + self.value = value + self.next = next + + +num = [list(map(int, (char for char in x.strip()))) for x in open("input.txt")][0] +num = num + list(range(len(num)+1, 1000000+1)) +MAX = len(num) + +nodes = dict() +nodes[num[-1]] = curr = last = Node(num[-1], None) +for n in num[-2::-1]: + nodes[n] = curr = Node(n, curr) +last.next = curr + +for _ in tqdm(range(10000000)): + pickups = [] + lp = curr + for j in range(3): + lp = lp.next + pickups.append(lp.value) + ap = lp.next + + destination = curr.value + while True: + destination -= 1 + if destination == 0: + destination = MAX + if destination not in pickups: + break + dst = nodes[destination] + lp.next = dst.next + dst.next = curr.next + curr.next = ap + curr = curr.next + +while curr.value != 1: + curr = curr.next +curr = curr.next +res = curr.value +curr = curr.next +res *= curr.value + +print(res)