day5 challenge

This commit is contained in:
Thibaud Gasser 2020-12-05 11:49:49 +01:00
parent 760fdac9ec
commit c2f1db90d6
3 changed files with 839 additions and 0 deletions

60
day5/day5.py Normal file
View File

@ -0,0 +1,60 @@
#! /usr/bin/env python3
from itertools import product
def main(filename):
results = {}
with open(filename) as inp:
for line in inp:
boarding_pass = line.rstrip()
row, col = parse_boarding_pass(boarding_pass)
seat_id = get_seat_id(row, col)
results[boarding_pass] = (row, col, seat_id)
part1(results)
part2(results)
def part1(results):
# part 1
max_seat_id = max(x[2] for x in results.values())
print("Max seat ID: ", max_seat_id)
def part2(results):
seat_ids = sorted(x[2] for x in results.values())
missing_seat_ids = set(range(max(seat_ids))) - set(seat_ids)
print(missing_seat_ids)
def parse_boarding_pass(boarding_pass):
row = _parse(boarding_pass[:7], "F", "B", 128)
col = _parse(boarding_pass[7:], "L", "R", 7)
return row, col
def _parse(inp, lower_option, upper_option, number):
rows = slice(0, number - 1)
for l in inp:
if l == lower_option:
rows = lower_half(rows)
else:
rows = upper_half(rows)
return rows.start
def lower_half(sl: slice):
length = sl.stop - sl.start
return slice(sl.start, sl.start + length // 2)
def upper_half(sl: slice):
length = sl.stop - sl.start
return slice(1 + sl.start + length // 2, sl.stop)
def get_seat_id(row, col):
return 8 * row + col
if __name__ == "__main__":
main('input.txt')

757
day5/input.txt Normal file
View File

@ -0,0 +1,757 @@
FBBBBBBLRR
FFFBFFFLLR
FFBBBBBRRL
BFFBFFBRLL
BFBFBBFLLR
FBFBBFBLLL
FBFBBBFRRR
FBFFBBBLRR
FBFBBBBRLL
FFFBBFBLLR
FBFBFFFRRL
FFBBBFFLLR
BFFFFFBRRR
FBFFFFFLLR
FFFBBFFRRL
FBBBBBBRRR
FBBFFBBRLR
FBFBFBBRLL
BFFBBFBLLR
FBFFFFBLLR
FFFBFFBRLL
BFBBBBBLRL
BFFBFBFLRR
FFBBFFBRLR
BFFFFBFLRR
BFFFFBBLRR
FBBFFFBLLL
FFBFBFBLRR
FBFBFBBRRL
FFBFBBBLRR
BFFBFFFRRL
BFBFBFBRRL
BFFBBBFRLR
BFBBFBFLLR
FBFBBBFLRL
FBFFBBBRLL
BFFFFBBLRL
BFBBBBBRRR
BFFBFFFLLL
BBFFFBFRRL
BFFBFBBRLL
FFBBBBFLRL
BFFFFFFRLL
BFFFBFBLRL
FFBBFBBLRL
BFBBBBBRLL
FBFFBBBLLL
BFBBFBFLLL
BFFBBBBRRL
FFFBFFBRLR
BFFBFFFRRR
FFBBBBFLLR
FBFBBBFRRL
BFBBFBBRLR
FBFBFFFRRR
BBFFFFBRLL
FBFFBFFRLL
BFBFBBBRRL
FFFBFBBLLL
FBBFBBFLLL
FFBBBBFRRR
FFFFBBBRRR
BFBFFBBRRL
FBBFFFFLRR
BFFBBFBRLL
FBFBBBBRLR
FFBBFBBRRR
FBBBBFFLRL
FFBFBFFRLL
BFFBBFFRRR
FBFBBBFLLR
BBFFBFFLRR
FBBFBFBLRR
FFFFBBBLRR
FBBFFBBLLR
FBBBFBFLRR
BFBBFFBLRL
FFBBFFFRLR
FBFFBFBRLR
FBFFFFFRLL
BFFFBFFRRL
BBFFFBBRRL
FFFBFFBLLL
FFBBFBBRLL
FBBFBBFRRR
FFFBFFFRLL
FFBFFFBRRL
BBFFFBFLRL
BFBFBBFLRL
FFFBFBFLLR
FFBBFFFRRR
BFFBBFBLRR
BFFBFFBLRL
FBBBFFBRRL
BFBBBFBRLR
BFFFBBBRRR
BBFFFBFRLR
FBFBFFBLLR
BFFFBFBLLL
FFBFFFBLRR
FFBBFFFRLL
BFFFBFFRRR
FBBFBFBRRR
BFBBBBFLLR
FBBFFBBRRL
BFFBFBBRRL
BFFBFBBLRL
BFFFBFBRRL
FFFBFBFRRL
FBFFFFBLRR
BFBBBFFRLL
FBBBFFFRLL
FBFFFFFLLL
BFBFFBBRRR
FBFBFFFLRL
FFFFBBFRLL
FBFFFBBLRR
BBFFFBFLLR
FBBBFFFLRL
FFBBFBFLRL
BFFFBBBLRR
BFFBBBFLRR
BBFFFFBRLR
FFBFBBFLRR
FFFBBBBRRL
BFBFFFFLLL
FBFBBFBLLR
FBBBBFFRRL
FFBFBBFRRL
FFFFBBFRRR
BFFFBBBRRL
BFBBFBFRRR
BBFFFBBLRR
BFBBBFBLRR
BFFBBBBLLL
BFBFFFBRLL
FBBBFBBRRL
FFBBBFBLLL
BFFBFBFLLL
BFBBFFBRRR
BBFFBFFLLR
BFBBBBFRRR
BFFFBBFLRR
BFFFFBBLLR
FFFBFFBLRL
BFBBFBFRRL
FFBBFBFLLL
BFFFFBFLLL
BFBFBBFRRL
BFFBFFFRLR
FBBBFFBRLL
BFBBBBFLLL
FBFFBFFRRR
BFFBFFBRRR
FBBBBBFRLL
FBBFBBBRRL
FBFBFFFRLR
FFFBFBBRLL
FFFBBFFRLR
BFBBFBBRRL
FFBBBBFLLL
BFFBFFBLLL
FBFBBFFRLL
FBBBFBFLLR
BBFFFFFRLL
FFBFBBBRRL
BFBFFFBRRR
FBBFFFFRLL
FBFBFBBLRL
FFBBFFFRRL
FBBBFFBLLL
FBBFFBBLRR
BFBFBBBRRR
BFBBBBBLRR
FBBFBFBRLR
FBBBBFBRRL
BFBFFBFRLL
FFBFBBBRLL
FFBFFFFRLL
FBFFBFFLLR
BFBBBBBLLR
FFBFFBFRLL
FBFFFBFLRL
BFFFFBFRRL
FFBBFBBLRR
BFBFFBFLRR
FBBBBFBLLL
BBFFFFFRRL
BFFBFFBRLR
BFFBBBBRRR
FFFBFFBLLR
BFFBFBBRRR
FFFBFFBLRR
FFBBBFBRLL
FFBFFFBRRR
FBFBBFBLRR
FBFFFFBLLL
FBFBFBBRRR
BFFBFFFLRL
BFBBBFFRLR
FBFBFBBLLR
FFFBBFBLRR
BFFBFFFLLR
BBFFFBBLLR
BFFFBBBLLR
BFBBBBBRLR
FBFFFBFRRR
BFBFBFFLRR
FBBBBBBRLL
FFFBFFFLRL
BBFFFBFRLL
BBFFBFFLRL
FBFFFBBLLL
BFFBBBFLLL
BFBBFBFRLR
BFBFBFBLRR
FBBFFBFRRR
FFFBFFBRRR
BFBBBBFLRL
FBBBFBBLLR
FFBBBBBRLR
FFFBBBFRLR
FBBFFBFLLL
FFFBFBBLRR
BFBFBBFLRR
BBFFFBBLLL
FBBBBBFLRR
BBFFFBFLLL
FBFBBFBRRR
FBFFBBFLLR
FFFBBFBRRR
BFBFBBFRLR
FBFBBFFLRL
FFBBBFBRRL
FFBFFBFRRR
BBFFFFFLLL
BFBBFFFRLR
FBFFFFBRRR
FBBFBFFRRL
FBBFBBFRLR
FFFBFFFLRR
FBBBFFFRRL
FFBBBBBLLR
BFBBBFBLLL
FBBBBBFLLL
FFBBFBFLRR
BBFFFFBRRL
FFBBBFFRRR
FBFBBFBRLL
FBBBBBBLRL
BFBFFFFRRL
FBBFBBBRLR
FBBFBBBLRR
FBFBFBFRRL
FBBFBFFLLL
FFFBFBFLRR
FBFBBFFRLR
BFFFBFFLLR
BFFBFBBRLR
FFBBBBBLRR
BFFFFFBLLR
BFFBBBBLLR
FBFBBFBLRL
BFFBFFFLRR
FFFBFBFRLR
BFFBBBBLRR
FFFBBFFLLR
FBFFFBBRRR
BFBBBFFRRL
FFBBBFBRRR
FBBBFBBLRL
BFBBFFFLLR
BFFFFFBRRL
BFFBBBBLRL
FBBBBBFLLR
FFFFBBFLRR
BFBBFBBLLL
FFFBBBFRLL
BFBFFFFRRR
BFFBBFBRRL
FBFFFBBRLL
BFFFFBBRRL
BFFBBFFLLL
FFFBFBFRRR
FBBBBBFLRL
FFBFFBBLRR
FFBBBFBLRR
FFBFFFBLLR
FBBFFBFRRL
BFFFFBBLLL
BFFFBFFRLR
FBBBFFFRRR
BFBFFBFRLR
FBFBFFBLLL
FBFBBBFRLL
FBBFBFBRRL
FFFBBFFRRR
FFFBFBFLRL
FBFBFFFRLL
BFFBBBFRRL
FBFFBFBLLR
BFFFFFFRRR
BFFBFBFRLR
FFBBFFBLRR
FBFFBFFLRR
FBBBFFBRRR
FFFBBBBLLL
FBBFBBBLLR
BFFFFBFLLR
BFFBBBBRLR
BFFBBBFRRR
FBBBFFFLLL
BFBFFFBRRL
FBFFBFBLRL
BFBBBFFLLL
FBBBFFBLRR
FBBFBFFRLL
BFBFFBBRLL
BFBFBFFLLR
FBFFFFFRLR
FFFBBBBRLR
FFFFBBBRLR
BFFFBFFLRL
FBBFFFBLLR
FFBFBBFLLR
FFBBFBBLLR
FBBBFBFLLL
FBFFBFBRLL
FBBFBFBLLR
FFBFBFFRLR
FFFFBBBRRL
BFBFFBFRRL
FBBBBFFRLL
BFFBFBFRRL
BFBBFFBRRL
BFFFBFBRLR
FFFBFFBRRL
FFBFFBFRLR
BFFFBBBRLL
BFBBBFBRLL
FBBFBFFLRR
FFBBFBFRLR
BFBFBFBRLR
FBFFFBBRLR
BFFFFFBLRL
FBBFFFFLLR
BFFBFFFRLL
FBFBBBBLRL
FBFBFBBLLL
FBBBBFBLRR
FBBFBFBLRL
BFFFFBFLRL
FBFFBFBLRR
FBFFBBFLLL
BBFFFFFLRL
BFBFFFFLRR
BFBFBFFRRR
BFBBFBBLRR
FFFBBBFLLR
BFFBBFFLLR
FBBFFFFRRL
FBFFBBBRLR
FBBFFBBLLL
FFFFBBBLLR
BFBFBFFLRL
FFBFFFFRRL
BFBFFFBRLR
BFBFFFBLRR
FBFFBBFRLR
FBBBBFFLRR
FBFBFBFLRR
FFBBBFFLRR
FFBFFFFRRR
BFFFBFFLLL
FBBBBBBLLR
BFBFFFBLLL
FBFBFBBLRR
BBFFBFFRLR
FBFFBFFRLR
FFBBFFBLLR
FBBBBFBRRR
FFFBBBFLLL
FFBFBBFRLR
FBBBFBFRRR
FBFBBFBRLR
FBFFFBFRRL
FFFBFBFRLL
FBBFFFBRLL
FBBBFFFLRR
FFBBFBFRRR
BFBBFBFLRR
BFBFFBBLRL
FFFFBBFLLR
BFFBBFFRLL
FFFBBBFRRL
BFBBBFBRRR
FFBFBBBLRL
BBFFFFBLRL
BFFFFFFLRR
FFBFFBBRLL
FBBBFBBRLR
BBFFFFFLLR
FBFBFBFRRR
FBBFFBBRRR
FBBFFFBRRL
BFFBFBBLLL
FFBBBBFRLL
FFBBFFBLRL
FFFBBFFLLL
FFFBBBBLRR
FFBFBBBRRR
FBBBBFBRLL
FBFFFFFLRR
BBFFFFBLLL
FBFBBFFLLR
BFFFBFBLRR
BBFFFFBRRR
FBBFBFFRLR
BFBFBFBRLL
FFBBBFFRLL
FBFFFBBLRL
FFFBBFFLRR
BFBFFBBLLL
BFBFBBBLLR
FBBBBBFRRL
FFFFBBFRLR
FBBFBFBRLL
FFBFFFFRLR
BFBBFFFRRR
FFBFBBFLRL
BFBFFFFLLR
BFFFBBFRRL
FBFFBFFLLL
FBBBFBFRRL
FBFBFBFLLR
FBBFBBBRLL
BFFFFFBRLL
FBFFBBFRLL
BFBBFFBRLL
BFFBFBBLLR
BFFFFFFLLR
FBBBBFBLRL
FBFBBBBLRR
FFFFBBBLLL
FBBBFFFRLR
FBBBFBFLRL
FFFBFFFRLR
BBFFFBBRLR
BFBFBBBLRR
FFBFFBBRRR
FFFBFBBRRR
FBBBBFFLLL
BFBBBBBLLL
FFBFFFFLRL
BFBFFBBLRR
FFBFBFBRLL
FBBFBBBLLL
FBBFBBFRRL
BBFFFBFLRR
FBFFFFBRLR
FBBBBBFRRR
FFFBBFFRLL
BFBBFBBLRL
FFBFFFBRLR
FBBFFFBRRR
FFFBBFBRRL
BFBBBFFRRR
FBFBFFBLRL
FFBFFBBRRL
BFBFFFFRLL
FBBBFBFRLL
FBFBFFBLRR
FFFBBBFRRR
FBFFBBBLRL
BFFFBBBLRL
BFBBFFFLRR
BBFFFBBLRL
FBFFBBFRRL
BFBBBFBLLR
BFFBFFBRRL
FFBBBFFLRL
FFBFBFBRLR
BFFBFBFLLR
BFFFFBBRLL
FFFFBBFLRL
BFFFBBBLLL
FBBFFFBLRL
BFFFFBFRLL
BFBBFBBLLR
FBBFBBFLRL
FBBFFBFLRL
FFFFBBFRRL
FBFFBBBLLR
FFBBBFFLLL
FFBFBFFLRR
FBFFBBFLRR
FFBFBBBLLL
BFFBBBFRLL
FBFFFBFLLR
BFBBBBFLRR
FBFBFFFLLL
FFFBFBBLLR
FFFBBFFLRL
FBBBFBBLRR
FBBBFBBRLL
FFBBBFFRLR
BFBFFFFRLR
FBBFFBBLRL
FBFBFFBRRL
BFBBBFFLRL
FFBBBBBLRL
FBBBBFFRLR
FFBBFFFLLL
FBFFFFFLRL
FFFBFFFRRL
BFFFBBFRLR
FFFBBFBLRL
FBBFBBBRRR
FFFBBFBLLL
BFFFFFFLLL
BFBFBBFRLL
BFFFBFFRLL
FFBBBBFLRR
FFFBBBBRLL
FFBFBBFLLL
BFBBFFBLRR
FBFFFBFLRR
BFBBFFFLRL
FFBBFBBRLR
BFBFFBFRRR
FBBFFFBLRR
BFFFFBFRLR
FBFFFBBLLR
FBFBFFFLLR
FBBBBFFRRR
FBBFFFFLLL
FFBFFBBLRL
FFBBBBBRLL
FFBFBBBLLR
FBFFBFFRRL
FFBFFBBLLR
BFFFBBFLLL
FFBBFFBRLL
FFBFFBFLRR
FFBFFBBLLL
BFBBBFFLLR
FBFBFBFLRL
FFBBBBFRLR
BFBBFFBLLR
BFFFFFBRLR
FBFFFFBRLL
FBFBFFBRLR
BFFBBFBLLL
BBFFBFFRLL
BBFFFFFLRR
BFFFFBFRRR
BFBFBFBLLR
BFFFFFFLRL
FFBBFBBLLL
FFFBBBFLRR
FBBFFBFRLR
BBFFFBBRLL
FBBFBFFLLR
FBBFFBFLRR
BFFFBFBRLL
BFBFBFFLLL
FBFFBBBRRL
FBBBFBFRLR
FFBFFBFRRL
BBFFBFFRRL
FBBFFFBRLR
FFFFBBBRLL
BFBBFFFRRL
BFBBBBBRRL
BFBBFFFLLL
BFFBBBFLLR
FBFFFFFRRR
FBFBBFFRRL
FBBBFBBRRR
FBFBBBBLLL
BFFFFBBRLR
FFFBFBBRLR
BFFBFFBLRR
FBBFFFFRLR
FBFFBBFRRR
FFFBFBFLLL
BBFFFFBLRR
FBFBBBFLRR
BFBBBBFRRL
FFBBFFBRRL
BFFBBFBRRR
FFBFBBFRRR
FBFFFBBRRL
FBFBBFFLLL
BFFBFFBLLR
FBBFBFFRRR
FFFBBBFLRL
BFFBBBFLRL
FBFFFBFRLR
BFFFFFFRRL
FBBBFFBLLR
FBBBBBFRLR
BFBFFFBLLR
FFBBFBBRRL
BFBBFBFLRL
FBBBBBBRLR
BFFBFBBLRR
FBFFBBFLRL
FBBBFFBLRL
FFBBFBFRLL
BFBBBFBRRL
FBFBFFBRRR
FFBFBFFLLR
FFBFFBFLLL
FFFBBBBRRR
FBFFBFBRRL
FFBFFFFLRR
FFFFBBBLRL
FFBBBBBRRR
FFBBFFBRRR
FFBFBFBRRL
FFFBBFBRLR
BFBBFFBRLR
BFBBFBBRLL
FFBFFFBLLL
FFBBFFBLLL
FBBFFFFLRL
FFFBFFFLLL
BFBBFBFRLL
BBFFFBFRRR
FFFBBFBRLL
BFBBFFBLLL
FBFBFBBRLR
BBFFFBBRRR
FFFBBBBLRL
FFBFBFFRRL
FBBBBFBLLR
FBBFBBBLRL
BFBFBBBLLL
FBBFFBFLLR
BFBFBBBLRL
FFFBFFFRRR
FFBFFBFLRL
FBFBFBFRLL
FBFBBBFRLR
FBBBFFFLLR
FFBFBFFLRL
BFFBFBFRRR
FBBFBFBLLL
BFBBBFFLRR
FFFBFBBLRL
FBFBFBFLLL
FFBBBBBLLL
FBBFBFFLRL
FFBBFFFLRL
FBFBBBBRRR
BBFFFFBLLR
FFFBBBBLLR
BFFFBFBRRR
FBFFFFBLRL
FBFFFBFRLL
BBFFFFFRRR
FFBFFFFLLR
BBFFBFFLLL
FBFFBBBRRR
BFBBBBFRLR
BBFFFFFRLR
FBFBBFBRRL
FBFFFBFLLL
FBFBFFFLRR
FFBFFFBLRL
BFFFBBFLLR
FBFBFFBRLL
FFBBBFFRRL
FFBBBFBLRL
BFBFBBFLLL
BFBFBFBLRL
FBFBBBBLLR
FBBBBFFLLR
FFBBFBFLLR
BFBFBFFRLL
FFBBFBFRRL
FBBBFBBLLL
FFBBFFFLRR
FBFFBFBRRR
BFFFFFFRLR
BFBFBBFRRR
FBBBBBBRRL
FFBFFBFLLR
FFBFBBFRLL
FFBFBFFLLL
BFFFFFBLLL
BFFFBFBLLR
FFBBBFBLLR
FBBFFBFRLL
FBFBBBFLLL
FBFFFFFRRL
BFFBBFFRRL
BFBFFBFLLR
BFBBFBBRRR
BFFBBFFLRR
FBBFBBFRLL
FBBBBFBRLR
FFBFBBBRLR
FFFBFBBRRL
BFBBBBFRLL
FBFBBFFRRR
BFFFBBFRLL
FBFFBFBLLL
FBBFBBFLRR
BFBFFBFLRL
BFBFBFFRLR
BFBBBFBLRL
FBFFFFBRRL
FBBFFFFRRR
BFBFBFBLLL
BFBFBBBRLR
FBBFFBBRLL
BFBFFFFLRL
FFBFFFFLLL
FBFBFBFRLR
BFFBFBFLRL
FBFFBFFLRL
BFFFFFBLRR
FFBBFFFLLR
FFBFBFBLRL
BFBFFBFLLL
BFFBBFBRLR
FFBFFFBRLL
BFBBFFFRLL
BFFFFBBRRR
BFFBBFFLRL
FBFBBBBRRL
BFBFFBBLLR
FFBFBFBLLR
BFBFFBBRLR
BFBFBFFRRL
FBBFBBFLLR
BFBFBBBRLL
FBBBBBBLLL
BFFBBFFRLR
BFFFBBBRLR
FBFBBFFLRR
FBBBFFBRLR
BFBFFFBLRL
BFFFBFFLRR
FFBFFBBRLR
FFBFBFBLLL
BFFBBFBLRL
BFBFBFBRRR
FFBFBFBRRR
FFBBBBFRRL
FFBBBFBRLR
BFFBFBFRLL
BFFFBBFRRR
FFBFBFFRRR
BFFBBBBRLL

22
day5/tests.py Normal file
View File

@ -0,0 +1,22 @@
#! /usr/bin/env python3
from day6 import parse_boarding_pass, get_seat_id
def tests():
inputs = {
"FBFBBFFRLR": (44, 5, 357),
"BFFFBBFRRR": (70, 7, 567),
"FFFBBBFRRR": (14, 7, 119),
"BBFFBBFRLL": (102, 4, 820)
}
for boarding_pass, expected in inputs.items():
row, col = parse_boarding_pass(boarding_pass)
seat_id = get_seat_id(row, col)
assert row == expected[0]
assert col == expected[1]
assert seat_id == expected[2]
print(row, col, seat_id, expected)
if __name__ == "__main__":
tests()