summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2020-12-05 11:09:05 -0500
committerJesse Luehrs <doy@tozt.net>2020-12-05 11:09:05 -0500
commit935aa4ba68c865adbe36a99ae02bb6f40b73edc6 (patch)
treea0bf6dc425d00e19a29f94893fb39cc4f6142c1b
parent7543903709a1c7e56be6260befb117baea833c0a (diff)
downloadadvent-of-code-935aa4ba68c865adbe36a99ae02bb6f40b73edc6.tar.gz
advent-of-code-935aa4ba68c865adbe36a99ae02bb6f40b73edc6.zip
day 5
-rw-r--r--data/5.txt965
-rw-r--r--src/2020/5/mod.rs85
-rw-r--r--src/2020/mod.rs4
3 files changed, 1054 insertions, 0 deletions
diff --git a/data/5.txt b/data/5.txt
new file mode 100644
index 0000000..86c40f6
--- /dev/null
+++ b/data/5.txt
@@ -0,0 +1,965 @@
+FBFBBBFRLR
+FBBFBBBLLR
+FFFFFBBRRL
+BBBFFFBRRL
+BFFBFBFLRL
+FBFFBFFLLR
+FBFBBBBRLR
+FBFBFBFRLL
+BFFBFFBRLR
+FBBFFFBLRR
+FBFBBBFRRR
+BFFBBFBRLR
+BFFBFBFRRL
+FFFFBBBLRL
+FBBFBFFRLL
+BBFBBFBRLR
+BFFFFBBLLR
+FBFFFFFRRR
+BFBFFBFLRR
+BBFBFFBLLL
+BFBFFFFLLR
+FBBFBBBRLL
+BBBBFFFRRL
+FFBBBFFRLR
+FFFBFFFRRL
+FFFBBBBLRL
+BFBBFBFRRL
+BFFBBFBLLL
+FBFBBFFLRL
+BFFBBBBLRL
+FFBBBFFLRL
+FFBFBFFRRL
+BBBFBFBRLR
+FBFBBBBRLL
+FBBBFBBRRR
+FBFBFBFLLL
+BBFFFFFLLR
+FBFFFBBLRR
+FFBFFFBLRR
+BBBFBFFRLR
+FFFFFFBRRL
+BFBBFFFRRR
+FBFFBFBRRR
+BFFFBBFLRL
+BBFBFFFRRR
+BBFFFBBLRL
+FFBBFFFLLL
+FFFFFBBRLR
+BFBFFFFRRL
+FFBBFBBLRR
+BFBBFBBLLR
+FFBBBBFRRL
+BBBFFFFLRL
+BFBFFBFLRL
+BFFFFBBLRL
+BBBFBBBRLL
+BFBBFBBLRR
+BFBFFBBRRL
+BBFBFFFLLL
+FFFFBFFRRL
+FFFFBBBRRR
+FBBFBBFLRL
+FBFFBFBRLR
+FBFFBBBLLL
+FBFBBBFLLR
+FBBFBFBRLL
+BBBFBFFLLL
+BBFFFFFLRL
+FFBFBFBRLL
+FBBBFFBLRL
+FBFBFFBLRL
+FFFBBFBRLR
+FBFBBFBLLR
+FBFFBBBRLL
+BBFBBFBLLL
+FBBBBFFRLL
+FBBBBBBLRR
+FFFFFBFLRR
+BFFBFBBLRR
+FBFFBFFLRR
+BBFFFFBLRL
+BBFFBFFLLR
+FFFBBBBLRR
+FBFBBBFRRL
+FBBFFFBLRL
+BBFBBFFRRL
+FFBBBFBRLR
+BBBFBFBRRR
+FBFFBFFRRR
+FFBFFBFRLR
+BFBBFFBLLL
+FFBBBFFRRL
+FFFBFFFRLL
+BBFFFBFLLR
+BFFFFFBRLL
+FFBFBBBRLL
+FFFBFBFLLL
+FBBFBBBLRR
+BFBFBFBRLL
+FFBBBBBLLL
+FFBFFFBRRR
+BBFBBFFRLL
+BFFFFFFLRL
+FBFFBFFRLR
+BFFBBBFLRR
+FFFBBFFRLR
+FBFFFFBLLL
+BBFFBBBRRR
+FFBFBFBLLR
+FBBFFBBLLR
+BBFBBFBLLR
+BBFBBFBLRL
+BBBFFBFRRL
+FBFFBBBLRL
+BFBFBFFLLR
+BFFFFFBRLR
+FBFBFFBLLR
+BFFFBFBRLL
+FBFFFFBRRR
+BFBBFBBRRL
+FBFFFBBLRL
+BFBBBBFLRL
+BBBBFFBLRL
+FFBFFBBLRL
+FFFBFFBRLR
+FBFBFFBRLR
+FBFBFBBRRR
+BFFBFBBLRL
+FBBBFBBRLR
+BFBBBFFLLL
+BFBFBBBLLR
+BBBFBBBRRR
+FFBFFFFRLR
+BBFFFBBRRR
+BBBFBBFRRL
+FFBFFBBLLL
+BBFFBFFLRR
+BBFFBFBRRL
+BBFBBBFLRR
+FBFFBFBLRL
+BFBFFFFLLL
+FFBBBFBRRR
+BBBFBBBLLL
+FBFBBFBLRL
+BBBFFFBRLL
+BFFFBBFRRL
+BBBBFFFLLR
+BBBFBFFRLL
+FFBBFBFLRR
+FBBFBFBRRR
+FBBFBBFLRR
+BBFFFBFRRL
+FBFFFBBRLL
+BBFFFFFRLR
+FBBFBBFRRL
+FBFFFBBLLL
+BFBFBBFLLL
+BFFBFFBRLL
+FFFFBBBRLR
+BBFBBBBRLR
+BFBFFFBLRR
+BFBFFFBRLL
+FBFBBBBLLR
+BFFFBFFRRR
+FFBBBFFLLR
+BFBFFFBLLL
+FFBBFFBRLR
+FBBFBBBRRL
+BBFBFFBLRR
+FBBFBBBRRR
+FFFBBFBRRL
+BFBFBFBLLR
+BBFBFFBLRL
+BBBFBFBRRL
+BFFBFBFLLR
+BFBFBBBLRR
+FBFFFBFRLL
+BFFBFFFRRL
+FBFBFFFRRR
+BFFBFFFRLL
+FFBBFFBLLL
+BBBBFFFRLR
+BBBFFBFLLR
+BFBFBFBRRL
+BBFBBBBLLR
+BFFBBFFRLR
+FFFFBBBRRL
+BFFFBBFRLR
+FFBBFBBLLL
+BBBFFFBLLR
+BBFBBBFLLL
+FFFFFBFLLR
+BBBFBBFLRL
+FFFFFBFLLL
+BBFBFFFLLR
+BFBBFBFLRL
+BFBFBBFRRL
+BBBFBFFRRL
+BFFFBBFRLL
+FFFFBFBLRL
+BFBBBBBLRR
+FFFBFFBLRL
+FFFBBBBRLL
+BBBFBFBLLR
+BBBBFFBLLR
+BFFFBBBLLR
+BBFFFBBLLR
+BBFFBBBLRR
+FBBFBFBLLR
+BBBFFFFRLL
+FBBFBFBRRL
+FFBFBFFRLR
+BFFFFBFLLL
+BBFBBBBLLL
+FBFBBBBLRR
+BBBBFFFRLL
+BFBBFBBRRR
+FFFFBBBLLL
+BBFFBFBRLL
+FBBFFBFLRL
+FFBBBFFRLL
+FFFBBBFRLR
+FFBBFBFLRL
+BBFBFBFLLR
+BFFFFFBLRR
+FBFBBBFRLL
+FBFFFFFLLR
+FBFBFFBLLL
+BFFBFBFRLR
+FFBFBFFLLL
+FFFFFBBLLR
+BBBBFFBRRR
+FBFBFBFLLR
+BBFFFBFRLR
+BBFFBFBLRR
+BFFBBFFLRR
+BFFFFBFLLR
+FBBFBFBLRL
+BFFFFBFLRL
+BBFFFFFLRR
+BBBFFFFRRR
+FFBBBFFLRR
+BFFFBFBLRL
+BBFBFBBLRR
+BBFBFFBRLR
+FFFBFBFLRR
+FBFFFFFRLL
+BBFBBBFRLR
+BBFFBBFRRL
+BFBFFBBRLR
+FFBFFFBLLR
+BFBFFFBRLR
+BBBBFFBRLR
+BFBFFBFLLR
+BBFFBBFLLR
+FBFFFFBLLR
+FFFBBFBLRR
+FFBBFFBRRR
+FBBBFBFLRL
+FBFBFBFLRR
+BFFFBFBRRL
+FBFFFFBRRL
+FBFFFBBRLR
+FBBFFBBRRL
+FBBFBFFLRL
+BFBFBBFRLL
+FBBBBFFRLR
+FFBFFFFRRL
+BFBFBBBRRR
+BFFBBBFRRR
+BBFFFFFLLL
+BFBBBBFLRR
+FBBBBBFRRL
+BBFBFBFRRL
+BFFBFFFRLR
+FBFFFBFRRR
+FFBBBBBLLR
+FBFFFBFRLR
+BFBFBFBRLR
+FFFBBBFRRR
+FBBBFFBRLL
+BBFBFBBLRL
+FFFBFBBLLL
+BFBFBFFLLL
+FFFBFFFLLL
+FBBBFBBRRL
+FBFFFBFLRL
+FBFFBFBRLL
+BBFFBBFRLL
+BFFFBFFRLL
+FFBBFBFRRR
+BBBFFBBRRL
+BBFBFBBRLR
+FFBBFFFLRR
+FFBBBBFLLR
+FFBFFBFLLR
+FBBFBBFRLL
+FBFBBFFLRR
+BBBFFFFRRL
+FFFFFBBLRR
+BFBFBFFRLR
+FFBBBBFRRR
+FFBBFFFLLR
+FFBBBBBLRR
+FBBBBFBRRR
+FBFFFBBRRR
+BFFBFFBRRR
+BFBFBBFLRR
+FBFBBBBRRL
+FBBBBFBRLR
+BFFBBFBLLR
+FBBBFBBLLL
+FFBBBBBRLL
+FBBBBBBRLL
+FFFBFBBLLR
+BFFFFFBRRL
+BFFBFBBRRL
+FBBBFFBLRR
+FFFBFFFLRR
+FFBBBBFRLR
+BFFBFFFLLL
+FBFFBFFRLL
+BFBFBFFRLL
+FBBFBBBRLR
+FBFFBBFRLL
+FFBFFFBRLR
+BFBBFBFLRR
+BFBBBBFRRL
+FBFBFBBRLL
+BFBBBFBLRL
+FFBBFFBLRR
+BBFFBBBRLR
+FBBBFBBLRL
+BBBBFBFLRL
+BBBFBBFRRR
+FFFBBFBLRL
+BFBFFBBLLR
+BBBFFFBLRL
+BBFFFFBLRR
+FFBBBBFLLL
+FBFFFBFLLL
+FFBBFBBRRL
+BFFBBBBLRR
+FBBFFBBRLR
+BFBBFBFRLL
+FFBBBBBLRL
+FBFBFFFRLR
+BFBBBFBRRR
+BFBBBFBRLL
+BBFBBBFRRR
+BFFBBFBRRR
+BBFFBBBRLL
+FFBFFBBRLR
+FFFFBBBRLL
+FFBBBFBLRL
+FFFBFBFRLL
+BFBFBBFRRR
+FBBFFFFRLL
+BBBBFBFLLL
+FBFBFFBRRR
+BFFFBBBRRR
+FFFBBFBLLL
+BBBFBBBRRL
+FBFFBFBLLR
+FBBBBBFRLL
+FBBFBFFLLL
+BFBFFFBRRR
+FBFBFBBLRL
+FBFBBBBLLL
+FFBFFFBRLL
+BFFFBFBRLR
+BFBFBBBRLL
+FFBFBBFLLL
+BBBBFFFRRR
+FFFBFBFRRR
+FFBBFFFRLL
+BFBBBBBLLR
+FBBBBFFLRL
+BFBFBBFLRL
+BFFBBBFLRL
+BBFFBFBRLR
+BBBFFBFLLL
+FBFFBFFRRL
+FFFBBBBRLR
+BBFBFFFLRR
+FBBBBBBRLR
+BBFFBBBLLL
+BBFBBFFLLL
+FBBFFBFRLR
+FFFFBFBLRR
+FFFBBFFRRR
+FBFBFBFLRL
+BBFFBBFRRR
+FFFFBFBRRR
+FFBFBBBLRR
+FBFFFBBRRL
+BFFBBFBRLL
+FFBFBFFLRR
+FFBBFBBLLR
+FBBBBBBLLR
+FFFBBBFLLL
+FFBBFFBLRL
+BBFFFBBRLR
+FFFFBFFRLR
+BBFBFFBLLR
+FFFBFBBLRR
+BBFFFFBRLR
+FBFBFFFRRL
+FBBBFBFLLL
+FFFBBBFRLL
+FFFBFBBRLL
+FFBFFBBLLR
+BFFFBBBLRR
+FFFBBFBLLR
+FFBFBBFLRL
+BFFBFBFLLL
+BFFFBBFLRR
+FBFFFBBLLR
+FBBFFBBLLL
+FFBBFFFLRL
+BBBFFBFLRL
+FBBFFFFLLL
+BFFBBFFLLR
+BBBFFFFLLL
+FBFFBBFRRR
+BFBBBBBRRR
+FBFFFFFLRL
+FFBFFBBRRL
+FBFBBFFRLL
+FFBFBBFRLR
+BBBFFBBLLL
+FFFBBBFLRL
+BBFFFBBRRL
+BFFFFFBLLR
+FBBBFFBLLR
+BBFBBFFLRR
+FBFBBFBLLL
+BFBBFBFRLR
+BFBBFFBRRL
+BBFFFBBLRR
+FBBFFBFLRR
+FFFBFFBRRR
+FBFBBBBLRL
+BBFFBBBLLR
+FFBFFFBLRL
+FBBBFFFLRR
+BBBBFFBRLL
+BFFBBBFLLR
+BFBBBBFRLL
+BFFBFFBRRL
+BFFFFBBRLR
+FFBFFFBLLL
+FBBFFBFRLL
+BFFBBBBRLR
+BFFBFBBLLL
+BBBFFBFRLR
+BBFBBFBRLL
+FFFFBBFRRL
+FFBFBFBLRR
+BFFBBBBLLR
+BFFFFBFRRL
+FBBBBFBLRL
+BBBFFBBLRR
+FBBBBFBLLL
+FFFBFBBLRL
+FFBFBBFRRR
+BFBBFFBRLR
+BBFFBBFLRR
+FBBBFBFRLR
+FBBFBFBLLL
+BFFFBBFRRR
+BFFFFBFRLR
+FFBFFBFRRR
+FFFFBBFRLR
+FBBFFFBLLL
+FBFFBBFLRR
+BFFFFFFRLL
+BFBBBFFLRR
+FBFFBFBLRR
+FBFBBFFRRR
+FFFBBBBRRL
+BFFFBFFLLR
+FBBBBFFLLR
+BFFFFFFRRR
+FFBFFFFLRR
+FBBFFFFRRL
+FBBFFFFRLR
+BBFFBBBLRL
+FBFFBBBRRR
+BFFFBBBRRL
+BFFFBBBLLL
+BFFFFBBRLL
+BFFFFFFLRR
+FBFBFBFRLR
+FFFBFFFRRR
+FFFFBBFLLL
+BBBFBFBLRR
+BBBFBBFLRR
+BBFBFBBLLL
+FFFBBBFLRR
+FBBFFFBRLL
+BFFBFFFLRR
+BFBFBBBRRL
+BFFBBBBRRR
+FBFFBBBLRR
+BFFFBBFLLL
+BBBFBFBLRL
+BFFFBFBLLR
+BBBFBFFLLR
+FFBFFBBLRR
+FBBFBFFLRR
+BBBFFBFRRR
+BFBBFFFLRL
+FFBBBFBLLR
+FBBBBFFRRR
+BFBBBBBRLR
+BBFFBFBLLR
+BFFBFBBRLR
+BFFBFFFLLR
+BFFBBBBRRL
+BBFBFBFLRL
+BFFBBBFLLL
+BBBFFBFLRR
+FBFFFFFLRR
+BFBFBFBRRR
+BBBFFBFRLL
+BFFFBBFLLR
+BBBFBBFRLR
+FFFFBBFLRR
+FBBBFBFRRL
+FFFBFFBRRL
+FFBFFBBRRR
+BFBBBBBLLL
+FFBFFBFRLL
+BFBFFFBLLR
+BFFBBFBLRL
+BBFBBFFLRL
+FFFBFBFRRL
+BFFBBBBRLL
+FBFBFFBRRL
+FFFFFBFRLR
+FBBBBFBRLL
+FFFFBFFLLL
+FBFBFBBRLR
+FBFFFFBRLR
+BFBBFFBLRR
+BFBBBFFRLL
+BBFBBFFLLR
+FBFBBBFLRR
+FFFFBFFRLL
+BFBBFFBRRR
+BBBFFFFLLR
+BBFFFBBLLL
+BFFFFFFRRL
+BFBBFFBRLL
+FFBFFFBRRL
+FBFBBFBRLL
+BFBBBFBLRR
+BBFBFBFLRR
+BBBFBBFLLL
+FBFBFFFLRR
+BBBBFFBLRR
+FFFBBFFLRR
+BFFFBFBLLL
+FFFFBFFLRL
+FFBBFBBRLR
+FFFBFBFRLR
+BFFBFBFRLL
+BBBFFFBLLL
+BBFBBFBRRR
+BFBFBBBLLL
+BFFBFFBLLR
+BFBBFBBLRL
+BBFBFFBRLL
+FBFBBFFLLR
+BFFFFFBLLL
+FBFFFFFRRL
+FFFFFFBRRR
+BBBFFFFRLR
+FBFFFBFRRL
+BFBFFBBRLL
+BBFBFFBRRR
+FFBFBBBLRL
+FFFBFFBLRR
+FFFBBBFRRL
+BFFBBFBRRL
+BFBFFFBLRL
+FBBFFBBRLL
+FFBBBBBRRL
+FBBBBFBLRR
+BBFBFBBRRL
+FBBBFFBRLR
+FFBBFBBRLL
+FFFBBBFLLR
+BFBBFFFLRR
+FBBBFFFLRL
+BFBFFFBRRL
+FFFFBBBLRR
+FFFBFFBRLL
+BFBBFBBRLR
+FFFFFBBLLL
+BFBBBFFRLR
+BFBFFFFLRR
+BFBBFFFLLR
+FFFFBFFLRR
+FFBFBFBLLL
+BFBFBBFRLR
+FBFFFBFLLR
+FFBBFFBLLR
+FBFBBBBRRR
+FBBBBBBLLL
+FFBFBBBRRR
+FBFFBBFRLR
+BFFFBFFLRL
+FFBFBFFRLL
+FBFFFFBLRR
+BFBFFFFRLR
+FBBBBBBRRL
+BFBFBFBLRR
+FFBFBBFLLR
+FFFBBFFLLL
+FFFBBFFLLR
+FBBBFBBLLR
+BFBBBFBLLL
+BFBFFBFRLL
+BFBBFFFRRL
+BFBBFFBLLR
+FBBFFBFRRL
+BBFBBBBRRR
+FBBBFFBRRR
+BFFBBBFRLR
+BBFBBBBRRL
+FBBBFBFLLR
+BFBFFFFRLL
+FBBFFFBLLR
+BBBBFFFLRL
+BFFBFBFLRR
+FBFFBFBRRL
+BFBBBFFLRL
+BBFFBFFRLL
+BFBFBBBLRL
+BBFFFBFLRR
+BBFBFFFRRL
+BFFBFBBLLR
+FFFFBFBRLR
+FFBBBBFLRR
+FBBBBBFLLL
+BFBBFBFLLL
+FBBBBFBLLR
+FBFBFFFLLL
+BBFFFBFLLL
+BBFBBBBLRL
+FFFFFBBLRL
+FFBFBBBLLR
+FFFBFFFLLR
+BFBFBFBLRL
+FFBFFBFLRL
+FBFFBBFLRL
+FFBFBBFRRL
+BFFBFFBLRR
+BFFBBFFRLL
+FFBFBFBRRL
+FBFBFBBLRR
+FBFBFBBLLL
+FFFFBBFRLL
+FBBBFFFRLR
+FBFBBFBRLR
+FBFFBBFLLL
+BBFBBBFRLL
+FBBBBBFLLR
+FBBFFBBRRR
+BFFBBBFRRL
+BBFFBFFRRR
+FFBFBBBLLL
+FBBBBFFLLL
+BBBBFBFLLR
+FBBFBFFRRL
+BBFBFBFRLR
+FFFFBFFRRR
+BFBFBFBLLL
+BBFBBBBLRR
+BBFFBFBLLL
+BFBFBFFLRL
+FFBFFFFLLR
+FFFBBFFRLL
+BBBBFFBRRL
+BBFBBFBRRL
+BBBFBFFLRL
+BFFFBBBRLR
+FBFBBBFLRL
+FFBBBFBLRR
+BFBFFFFRRR
+BBBFFFBLRR
+FFBFFFFRLL
+BFBFFBFRRR
+BFBBBFFRRL
+FFFFFBFRLL
+BBBFFBBLLR
+BBBFFFFLRR
+BFFBBFFRRL
+FFBFBFFLLR
+FBBBBFBRRL
+FBFBFBBRRL
+BBFFFFBRLL
+FFBFBBBRLR
+FBFBBFFLLL
+FFBBBBBRLR
+BFBBBBBRRL
+BBBFBFFRRR
+FFFBBFBRLL
+BFBBFFFLLL
+FFFFBFBRLL
+BBFFBBFLRL
+FFFBFBBRRL
+BBFBFBBRLL
+BFBFBBBRLR
+FFFFBBBLLR
+BFBBBBBRLL
+FBBFBFFRRR
+FBFFFBFLRR
+FBBBFFFLLL
+FFBFBFBRLR
+FFFBFFBLLL
+FFBBFBFLLL
+BFBBBFBLLR
+FFFFBFBRRL
+FFFBFFBLLR
+BBFFBBFRLR
+BFFFFFBRRR
+BFBBFFFRLR
+FFFFFBBRLL
+BBBFFBBRLL
+BFFBFBBRRR
+BFBFBFFRRL
+FBBFFFBRRL
+FFFBBFFLRL
+FBBFFBFLLL
+FBBFFFFLLR
+BBFBBFBLRR
+BBBFBBBRLR
+FFFFBFFLLR
+BFFBBFFLRL
+BBFBBBFRRL
+BBFFFFFRRL
+BFBFFBBLRR
+FFBBFFFRRL
+BBFBFBFRLL
+BFFBFFFRRR
+BBFBFFFRLR
+BFFBFBBRLL
+BFFFFBBRRR
+BFBFFBFLLL
+FFFFFBFLRL
+FBBFBBBLRL
+BFBBBFBRLR
+BFFFFFFLLL
+FFFBFFFRLR
+BFBBBFFRRR
+FBBFFBBLRL
+BBFFFFBRRL
+BFFFFBBRRL
+BBBFFFBRRR
+BFBBFBBRLL
+FBBFFBFLLR
+FFBBFBBRRR
+BBFFBFBLRL
+FFBFBFBRRR
+BFBBFFBLRL
+BFFBBFFLLL
+FFFBBBBLLR
+FFBFBBFRLL
+FBBBFFBLLL
+BFBFBFFLRR
+BFBBFFFRLL
+FFBFBBBRRL
+FFBBFBFRRL
+FBFBBFBRRL
+BFFBBBBLLL
+BFBFFBBRRR
+BBFBBBFLRL
+BFBFFBFRRL
+BFFBFFBLLL
+FFBFFBFRRL
+BBBFFFBRLR
+FBBFFFBRRR
+FFFBFFFLRL
+FFFFBFBLLL
+BBBBFFBLLL
+BBFFFFBLLL
+BBBFBBBLRL
+FBFBFBBLLR
+BFBFFFFLRL
+BFFFFFFRLR
+FFFFFFBRLR
+BFFFFFBLRL
+BBBBFFFLRR
+FBBFBFBRLR
+BFBBBBFLLR
+FBBBBBFLRL
+FFBFFFFRRR
+FBFFBBFLLR
+BBBBFFFLLL
+FBBFFFFLRR
+BBFBBFFRRR
+BFBBBBFRRR
+FBBBFFBRRL
+BBFFFFBLLR
+BBFFFFFRRR
+BBFBFFFLRL
+BFFFBFFLRR
+BBBFBFFLRR
+FFFBBFFRRL
+FFFBFBFLRL
+BFBFFBBLLL
+FFBBFBBLRL
+FBFFFFBLRL
+FFFFBBFLLR
+BFFBBFBLRR
+BFBBBFBRRL
+BBFFFBFLRL
+FFBBBBFRLL
+BFFFBFBRRR
+FBBFBFFRLR
+FBFFFFFLLL
+BBFFBFFRLR
+FBBBBFFRRL
+BFFFBBBRLL
+BBBFFBBRLR
+FBFFBBFRRL
+BBFBBBFLLR
+FFBFFBFLLL
+FBBFFFBRLR
+BBFBBBBRLL
+FBFBBBFLLL
+FBBBBFFLRR
+FBBBFBFRLL
+FFFBBFBRRR
+BBFBFBFLLL
+BFBBBBFRLR
+BBFBFFFRLL
+FBBFBFFLLR
+FFBBBFBRLL
+FBBBFBFRRR
+FBFBFBFRRR
+FBBBFFFLLR
+BBFFFBFRLL
+BBFFBBFLLL
+FFFBFBFLLR
+FFBBFBFLLR
+FBBFBBBLLL
+FBBFBBFRLR
+BFFFFFFLLR
+FBFBBFBLRR
+BBFFBFFLRL
+BFFFFBFRLL
+FBBBBBBLRL
+FFFFFBFRRR
+FBFFBBBRLR
+FBBFFFFLRL
+BBFFBFFLLL
+FFBBFFFRRR
+FFFFBBFLRL
+BBFBFBBLLR
+FBFBFFBLRR
+FBBBFFFRRL
+BFBFFBFRLR
+BFBFBFFRRR
+FBBBFBBLRR
+BBFFBFBRRR
+FFFFFBBRRR
+BBFBFBBRRR
+BFBBFBBLLL
+FFBFFBBRLL
+FBFFBFFLLL
+FFBBFBFRLR
+BBBFBBFLLR
+FBBFBFBLRR
+FFFBBBBLLL
+BBFFFFBRRR
+FBFFBBBLLR
+FBFBFBFRRL
+BBBFFBBLRL
+BBFBFFBRRL
+FBBFFBFRRR
+FBBBBBFRLR
+BFFFFBFLRR
+FBBFBBFLLL
+BFFFBFFRRL
+BBBFFBBRRR
+BBBFBFBLLL
+BFFFBFBLRR
+FBBBFFFRLL
+FBFFFFBRLL
+FBBFFBBLRR
+FFBFFBFLRR
+FBBBFFFRRR
+BFFBFBFRRR
+BBFFBFFRRL
+FFBFFFFLLL
+BFFFBBBLRL
+FBFBFFFRLL
+FBFBFFBRLL
+BBBFBBBLLR
+FFBFBFFRRR
+FBFBBFFRLR
+BBBFBFBRLL
+BFBBBFFLLR
+BBFBFBFRRR
+FBFBBFFRRL
+FFBBBFFLLL
+BBFFFBBRLL
+FBBBFBFLRR
+FBFFBFBLLL
+FFBFBFBLRL
+FFFBFBBRRR
+FBBBBBFRRR
+BFFFBFFLLL
+FFBBBBBRRR
+FFFFFBFRRL
+FBBBFBBRLL
+FBBFBBFLLR
+FBBFFFFRRR
+FFBBBFBRRL
+BFFBFFFLRL
+BFFFFBFRRR
+BFFFFBBLLL
+FBBBBBFLRR
+BFFBBFFRRR
+BFBFBBFLLR
+FFBBBFFRRR
+FFBBFFBRRL
+BFBFFBBLRL
+BFFBFFBLRL
+FFBBBBFLRL
+FFBBFFBRLL
+FBFFBFFLRL
+FFBBBFBLLL
+BBFBBFFRLR
+BBBFBBBLRR
+FFFBBBBRRR
+BFFFFBBLRR
+FFBFFFFLRL
+BFBBBBBLRL
+BBBFBBFRLL
+FBFFFFFRLR
+BBFFFFFRLL
+FBFBFFFLRL
+FFFBFBBRLR
+FBBFBBFRRR
+FBFBBFBRRR
+BBFFFBFRRR
+FFFFBBFRRR
+FFFFBFBLLR
+BFBBFBFLLR
+BBFFBBBRRL
+FFBBFBFRLL
+FBFBFFFLLR
+BFFBBBFRLL
+FBBBBBBRRR
+FBFFBBBRRL
+FFBFBBFLRR
+BFFFBFFRLR
+BFBBBBFLLL
+FFBBFFFRLR
+FFBFBFFLRL
diff --git a/src/2020/5/mod.rs b/src/2020/5/mod.rs
new file mode 100644
index 0000000..d0005f8
--- /dev/null
+++ b/src/2020/5/mod.rs
@@ -0,0 +1,85 @@
+use anyhow::Context as _;
+use std::convert::TryInto as _;
+
+pub fn part1() -> anyhow::Result<i64> {
+ let input = crate::util::read_file_str("data/5.txt")?;
+ let mut max = 0;
+ for line in input.lines() {
+ let id = seat_id(line)?;
+ if id > max {
+ max = id;
+ }
+ }
+ Ok(max)
+}
+
+pub fn part2() -> anyhow::Result<i64> {
+ let mut seats = vec![false; 1024];
+ let input = crate::util::read_file_str("data/5.txt")?;
+ for line in input.lines() {
+ let id = seat_id(line)?;
+ seats[id as usize] = true;
+ }
+ let first = seats
+ .iter()
+ .position(|b| *b)
+ .context("failed to find taken seat")?;
+ let seat = seats
+ .iter()
+ .skip(first)
+ .position(|b| !*b)
+ .context("failed to find free seat")?
+ + first;
+ if !seats[seat - 1] || seats[seat] || !seats[seat + 1] {
+ return Err(anyhow::anyhow!("invalid seat found"));
+ }
+ Ok(seat.try_into()?)
+}
+
+fn seat_id(desc: &str) -> anyhow::Result<i64> {
+ if desc.len() != 10 {
+ return Err(anyhow::anyhow!("invalid desc {}", desc));
+ }
+ let row_desc = &desc[0..7];
+ let col_desc = &desc[7..10];
+
+ let mut min_row = 0;
+ let mut max_row = 127;
+ for c in row_desc.chars() {
+ let mid = (max_row + min_row) / 2;
+ match c {
+ 'F' => {
+ max_row = mid;
+ }
+ 'B' => {
+ min_row = mid + 1;
+ }
+ _ => return Err(anyhow::anyhow!("invalid desc {}", desc)),
+ }
+ }
+ if min_row != max_row {
+ return Err(anyhow::anyhow!("bug"));
+ }
+ let row = min_row;
+
+ let mut min_col = 0;
+ let mut max_col = 7;
+ for c in col_desc.chars() {
+ let mid = (max_col + min_col) / 2;
+ match c {
+ 'L' => {
+ max_col = mid;
+ }
+ 'R' => {
+ min_col = mid + 1;
+ }
+ _ => return Err(anyhow::anyhow!("invalid desc {}", desc)),
+ }
+ }
+ if min_col != max_col {
+ return Err(anyhow::anyhow!("bug"));
+ }
+ let col = min_col;
+
+ Ok(row * 8 + col)
+}
diff --git a/src/2020/mod.rs b/src/2020/mod.rs
index 8ef019e..8919f5f 100644
--- a/src/2020/mod.rs
+++ b/src/2020/mod.rs
@@ -6,6 +6,8 @@ mod day2;
mod day3;
#[path = "4/mod.rs"]
mod day4;
+#[path = "5/mod.rs"]
+mod day5;
pub fn run(day: u8, puzzle: u8) -> anyhow::Result<i64> {
match (day, puzzle) {
@@ -17,6 +19,8 @@ pub fn run(day: u8, puzzle: u8) -> anyhow::Result<i64> {
(3, 2) => day3::part2(),
(4, 1) => day4::part1(),
(4, 2) => day4::part2(),
+ (5, 1) => day5::part1(),
+ (5, 2) => day5::part2(),
_ => Err(anyhow::anyhow!("unknown puzzle {}-{}", day, puzzle)),
}
}