Day 1
For this challenge, we need to find two numbers from our input that sum to 2020, and calculate their multiplication.
def mul(numbers): x = 1 for n in numbers: x *= n return x
def day_1(nums, N = 2): for numbers in itertools.combinations(nums, N): if sum(numbers) == 2020: return mul(numbers)
day_1(read_numbers("day-1-example.txt"))
514579
day_1(read_numbers("day-1.txt"))
224436
Part Two
Part two uses the same input but wants the product of three numbers that add up to 2020.
day_1(read_numbers("day-1.txt"), 3)
303394260
Day 2
Password rules
Part one
def is_valid(line): rule, password = line.split(": ") num, letter = rule.split(" ") low, high = num.split("-") low, high = int(low), int(high) count = password.count(letter) return count >= low and count <= high
def num_valid(path): lines = read_lines(path) valid_lines = map(is_valid, lines) return sum(valid_lines)
num_valid("day-2-example.txt") num_valid("day-2.txt")
2
528
Part two
def is_valid(line): rule, pw = line.split(": ") num, letter = rule.split(" ") pos1, pos2 = num.split("-") pos1, pos2 = int(pos1) - 1, int(pos2) - 1 res = int(pw[pos1] == letter) res += int(pw[pos2] == letter) return res == 1
num_valid("day-2.txt")
497