Deleted Day1.py, Day2.py, Day3.py, Day4.py, Day5.py, Day_1.py files
This commit is contained in:
parent
e12d28d9a4
commit
083e0bbe32
99
Day1.py
99
Day1.py
|
|
@ -1,99 +0,0 @@
|
||||||
expense_report = []
|
|
||||||
|
|
||||||
with open('day1/input') as reader:
|
|
||||||
expense_report.extend([int(l) for l in reader.readlines()])
|
|
||||||
|
|
||||||
expense_report.sort()
|
|
||||||
|
|
||||||
def calc_two(sub_set, absolute):
|
|
||||||
first_i = 0
|
|
||||||
second_i = len(sub_set) - 1
|
|
||||||
first = sub_set[first_i]
|
|
||||||
second = sub_set[second_i]
|
|
||||||
|
|
||||||
while first_i < second_i and first + second + absolute != 2020:
|
|
||||||
if first + second + absolute > 2020:
|
|
||||||
second_i -= 1
|
|
||||||
second = sub_set[second_i]
|
|
||||||
else:
|
|
||||||
first_i += 1
|
|
||||||
first = sub_set[first_i]
|
|
||||||
if first_i < second_i:
|
|
||||||
return (first_i, second_i, first, second)
|
|
||||||
return None
|
|
||||||
|
|
||||||
# part one
|
|
||||||
# first_i = 0
|
|
||||||
# second_i = len(expense_report) - 1
|
|
||||||
# first = expense_report[first_i]
|
|
||||||
# second = expense_report[second_i]
|
|
||||||
#
|
|
||||||
# while first + second != 2020:
|
|
||||||
# if first + second > 2020:
|
|
||||||
# second_i -= 1
|
|
||||||
# second = expense_report[second_i]
|
|
||||||
# else:
|
|
||||||
# first_i += 1
|
|
||||||
# first = expense_report[first_i]
|
|
||||||
|
|
||||||
first_i, second_i, first, second = calc_two(expense_report, 0)
|
|
||||||
|
|
||||||
print(first, second)
|
|
||||||
print(first * second)
|
|
||||||
|
|
||||||
# second part
|
|
||||||
|
|
||||||
for i in range(len(expense_report) - 1):
|
|
||||||
res = calc_two(expense_report[i+1:], expense_report[i])
|
|
||||||
if res is not None:
|
|
||||||
print(res[2], res[3], expense_report[i])
|
|
||||||
print(res[2] * res[3] * expense_report[i])
|
|
||||||
break
|
|
||||||
|
|
||||||
# second part better?
|
|
||||||
# does not work! and probably never will!
|
|
||||||
|
|
||||||
# first_i = 0
|
|
||||||
# second_i = 1
|
|
||||||
# third_i = len(expense_report) - 1
|
|
||||||
# first = expense_report[first_i]
|
|
||||||
# second = expense_report[second_i]
|
|
||||||
# third = expense_report[third_i]
|
|
||||||
#
|
|
||||||
# up_with_second = first + second + third < 2020
|
|
||||||
#
|
|
||||||
# while first + second + third != 2020:
|
|
||||||
# if first + second + third > 2020:
|
|
||||||
# if up_with_second:
|
|
||||||
# if second_i+1 == third_i:
|
|
||||||
# second_i -= 1
|
|
||||||
# second = expense_report[second_i]
|
|
||||||
# third_i -= 1
|
|
||||||
# third = expense_report[third_i]
|
|
||||||
# else:
|
|
||||||
# if second_i-1 != first_i:
|
|
||||||
# second_i -= 1
|
|
||||||
# second = expense_report[second_i]
|
|
||||||
# else:
|
|
||||||
# third_i -= 1
|
|
||||||
# third = expense_report[third_i]
|
|
||||||
# up_with_second = True
|
|
||||||
# else:
|
|
||||||
# if up_with_second:
|
|
||||||
# if second_i+1 != third_i:
|
|
||||||
# second_i += 1
|
|
||||||
# second = expense_report[second_i]
|
|
||||||
# else:
|
|
||||||
# first_i += 1
|
|
||||||
# first = expense_report[first_i]
|
|
||||||
# up_with_second = False
|
|
||||||
# else:
|
|
||||||
# if second_i-1 == first_i:
|
|
||||||
# second_i += 1
|
|
||||||
# second = expense_report[second_i]
|
|
||||||
# first_i += 1
|
|
||||||
# first = expense_report[first_i]
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# print(first, second, third)
|
|
||||||
# print(first * second * third)
|
|
||||||
32
Day2.py
32
Day2.py
|
|
@ -1,32 +0,0 @@
|
||||||
pw_db = []
|
|
||||||
|
|
||||||
with open('day2/input') as reader:
|
|
||||||
for l in reader.readlines():
|
|
||||||
s = l.split()
|
|
||||||
split_restriction = s[0].index("-")
|
|
||||||
restriction_min = int(s[0][:split_restriction])
|
|
||||||
restriction_max = int(s[0][split_restriction+1:])
|
|
||||||
c = s[1][:-1]
|
|
||||||
p = s[2]
|
|
||||||
|
|
||||||
pw_db.append(((restriction_min, restriction_max), c, p))
|
|
||||||
|
|
||||||
valids = 0
|
|
||||||
for pw in pw_db:
|
|
||||||
count = pw[2].count(pw[1])
|
|
||||||
if pw[0][0] <= count <= pw[0][1]:
|
|
||||||
valids += 1
|
|
||||||
|
|
||||||
print(valids)
|
|
||||||
|
|
||||||
valids2 = 0
|
|
||||||
for pw in pw_db:
|
|
||||||
first = pw[0][0]
|
|
||||||
second = pw[0][1]
|
|
||||||
c = pw[1]
|
|
||||||
p = pw[2]
|
|
||||||
l = len(p)
|
|
||||||
if (first <= l and p[first-1] == c) is not (second <= l and p[second-1] == c):
|
|
||||||
valids2 += 1
|
|
||||||
|
|
||||||
print(valids2)
|
|
||||||
44
Day3.py
44
Day3.py
|
|
@ -1,44 +0,0 @@
|
||||||
import functools
|
|
||||||
|
|
||||||
slope_map = []
|
|
||||||
|
|
||||||
with open('day3/input') as reader:
|
|
||||||
slope_map.extend(reader.read().splitlines())
|
|
||||||
|
|
||||||
|
|
||||||
def check_slope(right, down):
|
|
||||||
global slope_map
|
|
||||||
pos = 0
|
|
||||||
y = 1
|
|
||||||
trees = 0
|
|
||||||
for l in slope_map[1:]:
|
|
||||||
if y % down == 0:
|
|
||||||
pos = (pos + right) % len(l)
|
|
||||||
if l[pos] == '#':
|
|
||||||
trees += 1
|
|
||||||
y += 1
|
|
||||||
|
|
||||||
return trees
|
|
||||||
|
|
||||||
|
|
||||||
def check_slope_short(right, down):
|
|
||||||
global slope_map
|
|
||||||
trees = 0
|
|
||||||
for (i, l) in enumerate(slope_map):
|
|
||||||
if i % down == 0:
|
|
||||||
pos = (i // down * right) % len(l)
|
|
||||||
if l[pos] == '#':
|
|
||||||
trees += 1
|
|
||||||
|
|
||||||
return trees
|
|
||||||
|
|
||||||
|
|
||||||
def check_slope_even_short(right, down):
|
|
||||||
global slope_map
|
|
||||||
return len(list(filter(lambda b: b, map(lambda en: en[1][(en[0] // down * right) % len(en[1])] == '#', filter(lambda en: en[0] % down == 0, enumerate(slope_map))))))
|
|
||||||
|
|
||||||
slopes = [(1, 1), (3, 1), (5, 1), (7, 1), (1, 2)]
|
|
||||||
|
|
||||||
total_trees = functools.reduce(lambda prev, slope: prev * check_slope_even_short(*slope), slopes, 1)
|
|
||||||
|
|
||||||
print(total_trees)
|
|
||||||
70
Day4.py
70
Day4.py
|
|
@ -1,70 +0,0 @@
|
||||||
import re
|
|
||||||
passports = []
|
|
||||||
|
|
||||||
with open('day4/input') as reader:
|
|
||||||
cur = ''
|
|
||||||
for line in reader.read().splitlines():
|
|
||||||
if line != '':
|
|
||||||
if cur == '':
|
|
||||||
cur += line
|
|
||||||
else:
|
|
||||||
cur += ' ' + line
|
|
||||||
else:
|
|
||||||
passports.append(cur)
|
|
||||||
cur = ''
|
|
||||||
|
|
||||||
if cur != '':
|
|
||||||
passports.append(cur)
|
|
||||||
|
|
||||||
def byr(s):
|
|
||||||
return re.match('^\d{4}$', s) is not None and (1920 <= int(s) <= 2002)
|
|
||||||
|
|
||||||
def iyr(s):
|
|
||||||
return re.match('^\d{4}$', s) is not None and (2010 <= int(s) <= 2020)
|
|
||||||
|
|
||||||
def eyr(s):
|
|
||||||
return re.match('^\d{4}$', s) is not None and (2020 <= int(s) <= 2030)
|
|
||||||
|
|
||||||
def hgt(s):
|
|
||||||
return (re.match('^\d+cm$', s) is not None and (150 <= int(s[:-2]) <= 193)) \
|
|
||||||
or (re.match('^\d+in$', s) is not None and (59 <= int(s[:-2]) <= 76))
|
|
||||||
|
|
||||||
def hcl(s):
|
|
||||||
return re.match('^#[0-9a-f]{6}$', s) is not None
|
|
||||||
|
|
||||||
def ecl(s):
|
|
||||||
return s in {'amb', 'blu', 'brn', 'gry', 'grn', 'hzl', 'oth'}
|
|
||||||
|
|
||||||
def pid(s):
|
|
||||||
return re.match('^[0-9]{9}$', s) is not None
|
|
||||||
|
|
||||||
verify = {'byr': byr,
|
|
||||||
'iyr': iyr,
|
|
||||||
'eyr': eyr,
|
|
||||||
'hgt': hgt,
|
|
||||||
'hcl': hcl,
|
|
||||||
'ecl': ecl,
|
|
||||||
'pid': pid,
|
|
||||||
'cid': lambda s: True
|
|
||||||
}
|
|
||||||
|
|
||||||
valid = set(verify.keys())
|
|
||||||
|
|
||||||
count_valids = 0
|
|
||||||
for p in passports:
|
|
||||||
props = set()
|
|
||||||
failed = False
|
|
||||||
for prop in p.split(' '):
|
|
||||||
key, value = prop.split(':')
|
|
||||||
props.add(key)
|
|
||||||
if not verify[key](value):
|
|
||||||
failed = True
|
|
||||||
break
|
|
||||||
|
|
||||||
if failed:
|
|
||||||
continue
|
|
||||||
missing = valid.difference(props)
|
|
||||||
if missing == set() or missing == {'cid'}:
|
|
||||||
count_valids += 1
|
|
||||||
|
|
||||||
print(count_valids)
|
|
||||||
26
Day5.py
26
Day5.py
|
|
@ -1,26 +0,0 @@
|
||||||
boarding_passes = []
|
|
||||||
|
|
||||||
with open('day5/input') as reader:
|
|
||||||
boarding_passes.extend(reader.read().splitlines())
|
|
||||||
|
|
||||||
|
|
||||||
def seat_id(boarding):
|
|
||||||
binary = boarding \
|
|
||||||
.replace('F', '0') \
|
|
||||||
.replace('B', '1') \
|
|
||||||
.replace('L', '0') \
|
|
||||||
.replace('R', '1')
|
|
||||||
|
|
||||||
return int(binary, 2)
|
|
||||||
|
|
||||||
|
|
||||||
res = max(map(seat_id, boarding_passes))
|
|
||||||
|
|
||||||
print(res)
|
|
||||||
|
|
||||||
# second part
|
|
||||||
all_seats = sorted(map(seat_id, boarding_passes))
|
|
||||||
for i in range(len(all_seats)):
|
|
||||||
if all_seats[i] + 2 == all_seats[i + 1]:
|
|
||||||
print(all_seats[i] + 1)
|
|
||||||
break
|
|
||||||
31
Day_1.py
31
Day_1.py
|
|
@ -1,31 +0,0 @@
|
||||||
expense_report = []
|
|
||||||
|
|
||||||
with open('day1/input') as reader:
|
|
||||||
expense_report.extend([int(l) for l in reader.readlines()])
|
|
||||||
|
|
||||||
expense_report.sort()
|
|
||||||
|
|
||||||
def calc_two(sub_set, absolute):
|
|
||||||
first_i = 0
|
|
||||||
second_i = len(sub_set) - 1
|
|
||||||
first = sub_set[first_i]
|
|
||||||
second = sub_set[second_i]
|
|
||||||
|
|
||||||
while first_i < second_i and first + second + absolute != 2020:
|
|
||||||
if first + second + absolute > 2020:
|
|
||||||
second_i -= 1
|
|
||||||
second = sub_set[second_i]
|
|
||||||
else:
|
|
||||||
first_i += 1
|
|
||||||
first = sub_set[first_i]
|
|
||||||
if first_i < second_i:
|
|
||||||
return (first, second)
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
for i in range(len(expense_report) - 1):
|
|
||||||
res = calc_two(expense_report[i+1:], expense_report[i])
|
|
||||||
if res is not None:
|
|
||||||
print(res[0], res[1], expense_report[i])
|
|
||||||
print(res[0] * res[1] * expense_report[i])
|
|
||||||
break
|
|
||||||
Loading…
Reference in New Issue