import collections import util def jolt_differences(adapters): adapters = sorted(adapters) differences = collections.Counter(adapters[i] - (adapters[i - 1] if i else 0) for i in range(0, len(adapters))) differences[3] += 1 return differences[1] * differences[3] if __name__ == "__main__": print(jolt_differences(util.readints()))
import day15a import util if __name__ == "__main__": print(day15a.elfgame(util.readints(), endround=30000000))
import functools import util def next_possible(adapters, start): i = start + 1 while i < len(adapters) and adapters[i] - adapters[start] <= 3: yield i i += 1 def count_possible(adapters): adapters = sorted(adapters) adapters.insert(0, 0) @functools.lru_cache def count_possible_from(start): if start == len(adapters) - 1: return 1 return sum( count_possible_from(i) for i in next_possible(adapters, start)) return count_possible_from(0) if __name__ == "__main__": print(count_possible(util.readints()))
import day01a import util if __name__ == "__main__": print(day01a.day1(util.readints(), 2020, size=3))
import util def say(n, r, n2r): prev_r = n2r.get(n, r) n2r[n] = r return r - prev_r, r + 1 def elfgame(numbers, endround=2020): n2r = {} r = 1 for start_n in numbers: n, r = say(start_n, r, n2r) while r < endround: n, r = say(n, r, n2r) return n if __name__ == "__main__": print(elfgame(util.readints()))
import itertools import util def day1(numbers, key, size=2): for combination in itertools.combinations(numbers, size): if sum(combination) == key: return util.prod(combination) raise SystemExit("No solution found") if __name__ == "__main__": print(day1(util.readints(), 2020, size=2))
import day09a import util def find_continuous_set(numbers, target): for i in range(len(numbers)): total = numbers[i] for j in range(i + 1, len(numbers)): total += numbers[j] if total == target: continuous_set = sorted(numbers[i:j + 1]) return continuous_set[0] + continuous_set[-1] if total > target: break raise SystemExit("No solution found") if __name__ == "__main__": numbers = list(util.readints()) target = day09a.find_invalid(numbers, 25) print(find_continuous_set(numbers, target))