diff --git a/day10/part1.py b/day10/part1.py index eb8a8df..8b531a9 100644 --- a/day10/part1.py +++ b/day10/part1.py @@ -1,14 +1,12 @@ -import numpy as np +from collections import defaultdict lines = sorted(int(x.strip()) for x in open("input.txt")) -lines.append(lines[-1]+3) -lines.insert(0, 0) -lines = np.array(lines) +cnt = defaultdict(int) +last = 0 +for line in lines: + mov = line - last + last = line + cnt[mov] += 1 -diff = lines[1:] - lines[:-1] -unique, counts = np.unique(diff, return_counts=True) -cnt = dict(zip(unique, counts)) - -print(cnt) -print(cnt[1]*cnt[3]) +print(cnt[1] * (cnt[3]+1)) diff --git a/day10/part2.py b/day10/part2.py index 6876480..bbf7c0e 100644 --- a/day10/part2.py +++ b/day10/part2.py @@ -1,27 +1,12 @@ lines = sorted(int(x.strip()) for x in open("input.txt")) -one_count = 0 -possibilities = 1 -one_cache = [1] - - -def count_one_possibilities(one_cnt: int): - for idx in range(len(one_cache), one_cnt+1): - one_cache.append(sum(one_cache[-3:])) - return one_cache[one_cnt] - - -# only 3 and 1 differences are available -# 3 has to be taken / calculate possibilities for 1 hops -prev = 0 +prevs = [0, 0, 0, 1] +last = 0 for line in lines: - diff = line-prev - prev = line - if diff == 1: - one_count += 1 - elif diff == 3: - possibilities *= count_one_possibilities(one_count) - one_count = 0 -possibilities *= count_one_possibilities(one_count) + mov = line - last + last = line + if mov > 0: + prevs = prevs[mov:] + [0]*mov + prevs[-1] = sum(prevs) -print(possibilities) # 64793042714624 +print(prevs[-1])