with open('input.txt') as fh: values = list(sorted(int(l.strip()) for l in fh)) values.append(values[-1] + 3) values.insert(0, 0) def part1(values): ones = 0 threes = 0 for i in range(1, len(values)): d = values[i] - values[i - 1] assert d in [1, 2, 3] if d == 1: ones += 1 elif d == 3: threes += 1 print(ones * threes) def count_combinations(values): combinations = [0 for _ in values] combinations[-1] = 1 i = len(values) - 2 while i >= 0: j = i + 1 while j < len(values) and values[j] - values[i] <= 3: combinations[i] += combinations[j] j += 1 i -= 1 print(combinations[0]) part1(values) count_combinations(values)