diff --git a/Day1.py b/Day1.py deleted file mode 100644 index 6f4c796..0000000 --- a/Day1.py +++ /dev/null @@ -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) diff --git a/Day2.py b/Day2.py deleted file mode 100644 index 2765790..0000000 --- a/Day2.py +++ /dev/null @@ -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) diff --git a/Day3.py b/Day3.py deleted file mode 100644 index 7490274..0000000 --- a/Day3.py +++ /dev/null @@ -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) diff --git a/Day4.py b/Day4.py deleted file mode 100644 index 691ea5b..0000000 --- a/Day4.py +++ /dev/null @@ -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) diff --git a/Day5.py b/Day5.py deleted file mode 100644 index fd644d2..0000000 --- a/Day5.py +++ /dev/null @@ -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 diff --git a/Day_1.py b/Day_1.py deleted file mode 100644 index 556f67e..0000000 --- a/Day_1.py +++ /dev/null @@ -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 \ No newline at end of file