Day 1

For this challenge, we need to find two numbers from our input that sum to 2020, and calculate their multiplication.

In [2]:
```def mul(numbers):
x = 1
for n in numbers:
x *= n
return x```
In [3]:
```def day_1(nums, N = 2):
for numbers in itertools.combinations(nums, N):
if sum(numbers) == 2020:
return mul(numbers)```
In [4]:
`day_1(read_numbers("day-1-example.txt"))`
Out [4]:
`514579`
In [5]:
`day_1(read_numbers("day-1.txt"))`
Out [5]:
`224436`

Part Two

Part two uses the same input but wants the product of three numbers that add up to 2020.

In [6]:
`day_1(read_numbers("day-1.txt"), 3)`
Out [6]:
`303394260`

Day 2

Part one

In [7]:
```def is_valid(line):
num, letter = rule.split(" ")
low, high = num.split("-")
low, high = int(low), int(high)

return count >= low and count <= high```
In [8]:
```def num_valid(path):
valid_lines = map(is_valid, lines)
return sum(valid_lines)```
In [9]:
```num_valid("day-2-example.txt")
num_valid("day-2.txt")```
Out [9]:
`2`
Out [9]:
`528`

Part two

In [10]:
```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```
In [11]:
`num_valid("day-2.txt")`
Out [11]:
`497`