From 9ee26756f4a9695068a68f89eccdee7b23adf2c8 Mon Sep 17 00:00:00 2001 From: Dave Pedu Date: Mon, 10 Dec 2018 10:15:56 -0800 Subject: [PATCH] Faster day 9 --- 9/a-dll.py | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 9/b-dll.py | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100755 9/a-dll.py create mode 100755 9/b-dll.py diff --git a/9/a-dll.py b/9/a-dll.py new file mode 100755 index 0000000..960687e --- /dev/null +++ b/9/a-dll.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python3 + + +class Node(object): + def __init__(self, val): + self.val = val + self.prev = None + self.next = None + + +def main(): + numplayers = 426 + lastmarb = 72058 + players = [0 for i in range(numplayers)] + + currentplr = 0 + curmarb = Node(0) + curmarb.next = curmarb + curmarb.prev = curmarb + nextmarb = 1 + while True: + if nextmarb % 23 == 0: + remove = curmarb.prev.prev.prev.prev.prev.prev.prev + players[currentplr] += nextmarb + remove.val + between_a = remove.prev + between_b = remove.next + between_a.next = between_b + between_b.prev = between_a + curmarb = between_b + else: + place_between_a = curmarb.next + place_between_b = place_between_a.next + curmarb = Node(nextmarb) + curmarb.next = place_between_b + place_between_b.prev = curmarb + curmarb.prev = place_between_a + place_between_a.next = curmarb + + if nextmarb == lastmarb: + break + nextmarb += 1 + currentplr = (currentplr + 1) % numplayers + + print("Winning score:", max(players)) + + +if __name__ == '__main__': + main() diff --git a/9/b-dll.py b/9/b-dll.py new file mode 100755 index 0000000..be846db --- /dev/null +++ b/9/b-dll.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python3 + + +class Node(object): + def __init__(self, val): + self.val = val + self.prev = None + self.next = None + + +def main(): + numplayers = 426 + lastmarb = 72058 * 100 + players = [0 for i in range(numplayers)] + + currentplr = 0 + curmarb = Node(0) + curmarb.next = curmarb + curmarb.prev = curmarb + nextmarb = 1 + while True: + if nextmarb % 23 == 0: + remove = curmarb.prev.prev.prev.prev.prev.prev.prev + players[currentplr] += nextmarb + remove.val + between_a = remove.prev + between_b = remove.next + between_a.next = between_b + between_b.prev = between_a + curmarb = between_b + else: + place_between_a = curmarb.next + place_between_b = place_between_a.next + curmarb = Node(nextmarb) + curmarb.next = place_between_b + place_between_b.prev = curmarb + curmarb.prev = place_between_a + place_between_a.next = curmarb + + if nextmarb == lastmarb: + break + nextmarb += 1 + currentplr = (currentplr + 1) % numplayers + + print("Winning score:", max(players)) + + +if __name__ == '__main__': + main()