aoc2020/day10.py
Stefan Harmuth 490978ff9b day 10
2020-12-10 07:47:12 +01:00

54 lines
1.2 KiB
Python

import aoclib
from functools import lru_cache
DAY = 10
TEST_SOLUTION_PART1 = 220
TEST_SOLUTION_PART2 = 19208
def part1(test_mode=False):
my_input = aoclib.getInputAsArray(day=DAY, return_type=int, test=test_mode)
adapters = set(my_input)
cur_jolt = 0
count_1 = 0
count_3 = 0
for adapter in adapters:
if adapter - cur_jolt == 1:
count_1 += 1
elif adapter - cur_jolt == 3:
count_3 += 1
cur_jolt = adapter
return count_1 * (count_3 + 1)
@lru_cache(None)
def getArrangeCount(adapter_list, cur_jolt):
count = 0
found = 0
if cur_jolt + 1 in adapter_list:
count += getArrangeCount(adapter_list, cur_jolt + 1)
found += 1
if cur_jolt + 2 in adapter_list:
count += getArrangeCount(adapter_list, cur_jolt + 2)
found += 1
if cur_jolt + 3 in adapter_list:
count += getArrangeCount(adapter_list, cur_jolt + 3)
found += 1
if found == 0:
found = 1
return count + (found - 1)
def part2(test_mode=False):
my_input = aoclib.getInputAsArray(day=DAY, return_type=int, test=test_mode)
adapters = frozenset(my_input)
return getArrangeCount(adapters, 0) + 1