summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Wernick <justin@worthe-it.co.za>2020-12-05 11:55:46 +0200
committerJustin Wernick <justin@worthe-it.co.za>2020-12-05 11:55:46 +0200
commit7b02df12fd6164abe52549c49c7bc2354b2509c5 (patch)
tree6326ea46b795cd0fd2bdcbca06e18ba6d242d9cc
parentc67831ccfb3e64b6564cdd0090dac1653564ddc0 (diff)
Day 5
-rw-r--r--inputs/day_5.txt901
-rw-r--r--src/bin/day_5.rs157
2 files changed, 1058 insertions, 0 deletions
diff --git a/inputs/day_5.txt b/inputs/day_5.txt
new file mode 100644
index 0000000..11800ca
--- /dev/null
+++ b/inputs/day_5.txt
@@ -0,0 +1,901 @@
+BBFBBBBRRL
+FBFFFFBLRL
+FBFBBFFRLR
+FBFFFBFRLR
+FFBBFFFLRR
+FFBBBFFRRR
+BFBBFBFLRL
+BFFFBFFLRR
+FBBBFFBLLR
+BBFFBBFRRL
+BFBBBBBRLR
+FBBBBFFLLR
+FFBFFFBLLR
+FFBBFBFRRR
+BBFBFFFRRR
+FFBFFBBLLR
+FBBFFBBLRL
+FFBBBFBLLL
+FFBFFBBLRR
+FBFFBFBLLR
+FFFBBBFLLL
+BFBBFBFRLR
+BBFBBBFLLL
+FBBBFBBRLL
+FFBBBBFRRL
+BFBBBBFLRR
+BBFBBFBLRL
+FFBFFFBLRL
+BFBBBBBRRR
+FFFBFBFLLR
+BFBFBBBLLR
+FFBFBBBLRL
+FFFBFBBLRR
+BFFBFFFLLL
+BFFFBFBLRL
+BFBFFFBRLL
+BBFFFFBRLR
+FBBFFFBLRR
+BFFFFBFLLL
+BBBFFFFLLL
+BFBFFBBRLL
+BBFBFFFRRL
+BFBBFFFRLR
+BBFBFBFRRL
+FBBFFBFRRL
+BFBFBFFRRL
+FFBFFFFLLR
+FBBBFBBLLR
+BBFFBFBRLL
+BFFBFBBRLL
+FBBFFFFRRR
+BFFFBBBLRL
+FFBBFFBLLL
+FFFBBFFRRL
+FBFBBBBLRR
+FFBBBFFLLL
+FBFBFFBRRR
+FBBFFBBLLR
+FBFFBFFRLL
+BFBBBFFRLR
+FBFFBBBLRR
+FBFFFFBRLR
+BBFFBBFLRL
+FBFFBBFLRL
+FBFBBFFRRR
+BFBBBFBLRL
+FBFBFFFLLR
+FFFFBBBLLR
+BFBFFBBLLR
+BFFBBBFRLR
+BFBBBFFLRR
+BBFFFBBLLR
+BFFFBBFLRL
+FBFFBFBLRL
+FBBBFFFRRL
+FBFFFFBLLL
+BFBFFBBRLR
+BFBFBBBLRL
+BFFBFBBRLR
+FBBFBBBLLR
+FFBFBFFRLL
+FFFBBBBLRR
+BFBFFFFLLL
+BBFBFBBLLR
+BFFFBBBRLR
+FFBFFBFRLR
+FBBFBBBLRL
+BBFFFBBLLL
+FFBFFBBRRR
+FBBBBFBLLR
+BBFBBFFRLL
+BFBBBBFRLR
+BBFBFFBRLR
+FFBFFFFLLL
+BBFBFBFRLL
+FFBFFBBRLL
+FBBFFFFRLR
+FFBBBBBRRR
+BBFFBBBLRL
+BFFBBFBRLL
+BFFFBBFRLL
+BFFBFBFLRL
+FBFFFFFRRR
+BFFBFBBRRL
+FBFBBBFLLR
+FBFBFBBRLL
+BBBFFFFRRR
+BFBFBFFLRL
+FFFFBFBRLL
+FFBBFFBLRL
+BBFFBFBLLL
+BFFBBBBRLL
+BFFBBBBRRR
+BFBBBBFRRL
+BBBFFFBLRL
+FFBBFFFRRR
+BFFFFFBRLR
+FFFBBFBLLL
+BFBFBBFRLR
+FBBBFBFLRL
+BFBFBFFRLR
+BBFBBFFLRL
+BFFFBFBLLL
+BFFFFBBRLL
+FFBFFFFRRL
+BFFBFBBLLR
+FFFFBBBLLL
+FBBFFBBRRL
+BFBFFFFLLR
+FBFBFBFRLL
+FBBBBBBLRR
+BBFFFFBLRR
+FFFFBFBRRR
+FBBBBFBRLL
+BBFBFBBLRR
+FFBBFBFLLL
+BFBBFFBLRL
+FFFBBBBRRR
+BFBBFFFRLL
+BFBBBFBRRR
+FFFFBBFRLR
+FFBBFBFLRR
+FFFFFBBLLR
+BBFBBFBRLL
+FBFBBBBRLR
+BBFFFFBLRL
+FBBFFFBLLR
+FFBFFBBLLL
+FFFBBBFLLR
+FFFBBBFRRR
+FFBBBFBRRR
+FFFBBFFRRR
+FFBBFFBLLR
+BFBFFBFRRR
+FFBFBBFLLR
+BFFFFFFRRR
+FFBFFBFLRL
+BFFBFBBRRR
+FBFBFFFRLL
+BBBFFFBLLL
+BFBBFBFRRL
+BFFFFFBLRR
+FBBBBBFRRR
+FFBBBBFLRR
+BBFBBBBLRR
+BBFBFBFLLR
+FFFFBBFRRR
+FFBBBBBLLR
+BFFFBFBRLR
+FBBBFFBLLL
+FFFFFFFRRR
+FFFBFBFRRL
+BFBBFBBLRR
+FBBBBFBLRL
+FBBBBFBRRR
+BFFFFBFRRR
+BFFBBFFLLL
+FBBFBFBLRL
+BFBBFFFRRL
+FBFBFFBRLR
+FBFFBFFLRR
+BFFFBFBLLR
+BFBBFFBRRR
+BBFBBFBLLL
+BFFBFFFLRR
+FFFBBFFRLL
+BFBBFFFLLL
+BFFFBBBRLL
+FBFFBBFRRR
+FFBFBFBLLR
+FBFFFFBLRR
+FFBBFFFLLL
+FFFBBBBRRL
+BBFBFFFLLL
+BBFFBBFLLR
+BFBFBBBRRR
+FBBBBFBRRL
+FBFFFBFLLR
+FBFBBBFRRR
+BFFFBFBRRL
+FBFBBBFLRL
+BBFFBFFLRL
+BBFBBFFLLR
+FFFFBFFRLL
+FFFBBBBLRL
+FBBBFBFRLL
+BBFFFBBLRL
+FFFBFFBLRR
+BBFBFBBRRL
+FFFFBBBRRR
+FFBBBBBLRL
+FFFFFFBLLL
+FBFFFFFRRL
+FFFFFBBLRR
+BFFFBBBRRL
+FBBFFFFLRL
+FFFFFBBRLR
+FFBFFBFRLL
+FFFBBBFRRL
+BFBBBFFLRL
+FFFFFBFLRR
+BFBFBBBRLR
+FBFBBBFLLL
+BFBFFBFLRL
+FFBFBFFRRR
+FFBBFFFRLL
+BFBFBFFLLL
+FBFBFBBRLR
+BFFBBBFRRL
+FBFFBBBRRR
+FBFBFBBLRR
+BFBBBBFLLR
+FFFBFFFRLR
+BFBBFFBRRL
+BFFFBFFLRL
+BFBFBBFRRR
+FBBFFBFLLL
+FFFFFFBLRR
+FBFFBFBLRR
+FFBBBFFLRR
+FBBBFFBRLL
+BFFFBBBRRR
+FFBFFFFRLL
+BBFFFBFRRR
+BFFBFBBLLL
+BFBBFFBRLR
+FFBFBBBLRR
+FFFBFBBLLL
+FFFBBFFLLL
+FBBBBBBLRL
+BFBFBBBLLL
+BFBFFFFRRL
+FFBFBBFRRR
+FFBFBFBRRL
+FFFBBBBRLL
+BFFBFFBRLL
+BBFFFFBRRL
+FFBFBFBLLL
+FFBFBFBRLL
+FBFBBBFRRL
+FBFFBBFRLR
+BBBFFFFLRL
+FBFBFFFRRL
+FFFBFBFRLR
+FBFBFBBRRL
+BFBBFBBLLL
+FFBBBBBRLL
+BBFFBFBRRL
+FFFBFFFRRR
+FBBFBFBLLL
+BFFFBFFRLR
+FBFBFFBRLL
+BBFBBFFLLL
+FBBBBFFLRR
+FFBBBFFLRL
+FBBBFFBRRR
+FFBBFBBRLR
+FBFBBFFLLR
+BFBBBFFLLR
+FFFBBFFLRR
+FBFFBFFLRL
+BFBFBFFLRR
+BBFBFFFLLR
+FFFBBBBLLR
+FFBBFFBRLL
+BBBFFFBRLL
+FBFFBFBRRL
+BFBFFFFRLL
+FBFBFBFRLR
+BBFFFFFLLL
+FFBFBBBLLR
+FFBFBFFLRR
+FBBBBFBRLR
+FFBFBBBRLR
+BFFBBBBLRL
+FFBBBBBRLR
+BFBBBFFRRR
+FBFBBFBRLL
+FFBFFFBRRL
+BBFBFBFLLL
+BFBBBFBRLR
+BFBBFBFLLR
+FBBFBFFRLL
+FFBFBBFLRR
+BFFBFBFRLL
+FFBBFBBLRL
+FBFBFBBLRL
+BBFFFBFLLR
+BFBFBBBLRR
+BBFFBBBLLR
+BBFFFFBRRR
+BFFFFFBLRL
+FBBBFBBRRR
+BFBFFFBLLL
+FFFBBFFLLR
+BFFBBFFLLR
+BBFBBBBLRL
+FBBFBFFLRR
+FBFBFFBLLR
+BFFFFFFLLL
+BFFBBFFRLL
+BBFFFFFLLR
+FBFFBBFRRL
+FBBFFFFLLR
+BFBFFBBRRL
+FFBFFFBLLL
+BFFFFFBLLR
+FFBBBFBRRL
+FFBBBBFLLR
+BFBFFFBLLR
+FFFFBFFRLR
+BFBBFFBRLL
+FFBBBBBLLL
+FBBFBFFRRR
+BFFFFFFLLR
+FFBBBBBLRR
+FFFFFBFRRR
+BFFFBBBLLL
+BFFFBFFRRR
+FFBBBFBRLR
+BFFBBBBLRR
+BFBBBFFRRL
+BFBFBFFRRR
+BFBBFBBRLR
+BFBBBBFRLL
+FFBBBBFLLL
+FFFBBFBLRR
+FBBFBBFRLR
+BBFBBFFLRR
+FBBFBBBRRL
+BFFBFFFRRL
+BFFFFBFLRR
+FFBFBBFLLL
+FFBFBBBLLL
+FBFFBFBRRR
+FFFBFFBRLL
+BFFFFBFLRL
+FFFFBFFLLR
+BBFBBBBRLL
+FBFBBFBRRR
+BFFFBBBLRR
+FBFFFBFRLL
+FFBBBFBLRL
+FBFFFBBLRR
+FFBBFBFRLR
+FBBBBBFLRL
+FFFFBFBLRR
+BFBFBFBLRR
+FFBBFFFLRL
+BFFBBBFLLR
+FFFFFFBRLR
+FFBBBFBLRR
+FBFBBFFRLL
+BBFBFBFRLR
+FBBFFFFLLL
+BFBBFBFRRR
+BFFBBBFRRR
+FBFFFBFLRR
+FBBFFBFLRL
+BFBBFFFLRR
+FFBFFFFLRL
+BFFBFFBLLL
+FFFBFBBRRR
+BBFFBFFLRR
+BBBFFFFRRL
+FBBBFFBLRL
+FBBFFBBLRR
+FFBFBFFLLR
+FFFBBFFRLR
+FBBBFBBRLR
+FFFFBBBLRR
+BBFFBFBRRR
+FBFBBFFLRL
+FBBBBFFLLL
+FFBFFBBRLR
+BBFFFFFLRR
+FFBFBFBRLR
+FFBFBFBLRL
+FBBBFBBLRL
+FFFBFBBLRL
+FBFBFFFRRR
+BFFBFFFRLR
+BFBBFFBLLR
+BFBFFBFRLL
+FBFBFBFRRR
+FBFFFFBRLL
+FFFFFBBRRR
+FBBBFFFLRL
+FFFBFFBRLR
+BFBFFBFLRR
+FBBFBBFRRL
+BFBBBBFRRR
+BFFFFBBLRR
+FBFFFFFLLL
+BFBFFFBRRL
+FFFBFFBLRL
+FFBFFFBLRR
+FBBFFBFRLL
+BBFBFFBLLL
+BBFFBBFLLL
+FFBBBFFRLL
+BFBBFFFLRL
+FBBFBFFLLR
+FBFBFFBLLL
+FFBBBFFLLR
+FBBFFBFLRR
+FBBFBBFRRR
+BFFFFBBLLL
+FFFBFFBLLR
+FBFBFFFRLR
+FBFBFBBRRR
+FBFBBFBRRL
+BBFBBFBRRR
+FFFFBBBRLL
+FBFFBBBLRL
+BBBFFFFRLL
+FBFFFBFLRL
+BFFFFBFLLR
+FBFBBFFRRL
+BFFBFBBLRR
+FBFBBBBRRL
+FBFBFBBLLR
+FBFFBBFLRR
+FFFFBFFLLL
+BFBFFFFRRR
+BBFFBBBLRR
+FBFFFFFLLR
+BBFBFFFRLR
+BFFFFBBRLR
+FBFFFFFLRL
+FBBBFBBLRR
+BFFBBFBLLL
+BFFBFBBLRL
+BFFBBBFRLL
+FFBFFBFRRR
+BFBFBFBRLL
+BBFBBFBLLR
+FBFBBFBLRL
+FBFFFBBRLR
+BBFBFFBRLL
+BBFFFBFRLR
+FBBFFFBLLL
+BBFBBBBLLL
+BFFFFFFLRR
+FBBBBBFRLL
+BFFFBFBRRR
+BFFFFFFLRL
+FBBBBFBLRR
+FBFFBBBRLR
+FFBBFBFRRL
+FFBBFBBRRL
+FFFBFBFRRR
+FFBBBBFLRL
+BFBBFFFRRR
+FBFBBBBRLL
+FBFFBBFRLL
+FFBFFFFRRR
+BFFFFBBLLR
+FBFBBFBLLR
+BBFFBBBRRR
+FBBFBBBRLR
+BFBFBFFRLL
+BFFBBFBLRL
+BFFBFFFRRR
+FFBBBFBRLL
+FBFFBFFRRL
+FBBBBFFRRR
+FFFBBBFRLL
+BBFFFBBRLL
+BBFFFBBRLR
+FFBBFFFRRL
+BBFFBFBLRR
+BBFBFFBRRR
+BFBBBBBLRR
+BFFBBFFLRL
+BBFFFFBLLL
+FFFFBFBRRL
+FBBFFBBRRR
+FBBBFFFLRR
+FBBFBBFLRR
+FBBBFBBLLL
+FFFFBBFLRL
+FFFFFBBLLL
+BFBBBBBLLR
+BFBFFFFLRR
+FBFFFFBLLR
+BBFFBBBRLL
+FBFFBFFRRR
+FFBBFBFLLR
+BBFBBBFLRR
+FBBBBBBRLL
+FFFFFFBLLR
+FFFFFBFRLR
+FBFFBFBRLL
+BBFFBFFRRR
+BFFBFFFLLR
+FFBBFBBLRR
+BBFFBBBRLR
+FFBBFFBRRL
+FBBBBFFRRL
+BFBFFFFRLR
+BFBBBFBLLL
+BFBFFFBRRR
+FBBBFFFRLR
+BFBBFFBLRR
+BBFBBFFRLR
+BBFFFBBRRR
+FFFFBBBRRL
+FFBFBBFRLL
+FBFFFFBRRL
+FBBBFFBRLR
+FFBFFFBRRR
+FBBBBBBLLL
+BFFBFFBLRL
+FBFFBBBRLL
+BBFBBBFRLR
+BFBFBFBRLR
+BBFFFFBRLL
+FFBBFBBLLR
+FFBBFFBRLR
+BBFBBBBRLR
+BFBBBFBLLR
+FFFFBFFRRR
+BBFFFBFRRL
+FBBFBBBLLL
+FFFBFFFLRL
+BFFFFBBRRR
+FFFBFBFLRL
+BBFFBBFRRR
+FBBFFFFLRR
+FFFBBBFLRL
+BFFBBBFLLL
+BFBBFFBLLL
+FFFFFFBLRL
+FBFFBFFLLL
+FBBBBBBRRR
+FBBFFBBRLR
+BFFFBBBLLR
+BBFBBBBRRR
+BFBFBFFLLR
+BFBFFBFRLR
+FBBBFFFRRR
+FFBFBBFRLR
+FFFFFBFRLL
+FFBFBBBRRR
+BFBFFBBLLL
+FBBBBBFRLR
+FFBBFBBLLL
+BFBFFBBLRL
+FBBFBFBRRL
+BFFBBBBRRL
+FBBFFFBLRL
+FBBFBFBLLR
+FBBFBBBLRR
+BFBBBFBRRL
+FBBBFBFLLL
+BFFFBFFLLR
+FBBBFBFLRR
+FFBFFBBLRL
+BBFBBBBLLR
+BFFFBFFLLL
+FBFFFFFLRR
+BBFBFBBLRL
+BFBFBBFRRL
+FBFBFFBLRR
+BFFFFFFRRL
+BFFFFBFRLR
+BFBBFBBRLL
+BBFFFFFRLL
+FFBBFFFLLR
+FFFBFFFLRR
+FFFBFFBRRR
+BBFBFFBLLR
+BFFBFFFRLL
+FBFBFFBRRL
+BFBBBFFLLL
+BBFFBFBLRL
+FBFBBFFLRR
+FBBFBBBRRR
+FFFBBFBRLL
+FBBFBFBRRR
+BFFFBBFLLL
+FBBBFFBLRR
+BFBFFBBRRR
+FFFFFFBRLL
+BBFFFBFLRL
+BFBFBFBRRR
+BFFFBBFRLR
+BFBFFFBLRR
+FFFBFFBRRL
+BBFFFBBRRL
+BFBBBFBRLL
+BFBFFFBLRL
+FFFBFFFLLR
+BFFBFFFLRL
+BBFBBFBLRR
+FBBBFBBRRL
+FBBFBFFRLR
+FBFFFFFRLR
+FBBBBFFRLR
+BFBFBBFRLL
+BBFBFBFRRR
+BFBFBFBRRL
+FBBBBBBRLR
+BFBFBBFLLR
+BFFFBBFRRL
+BBBFFFFRLR
+BBBFFFBLLR
+FBFBBBFLRR
+FBFFFBBLRL
+FBFFBBBLLR
+BFBFBBFLRR
+BFBBFBBLRL
+BFFFFFBRRL
+FFBBFFFRLR
+BFFBBFFRLR
+BFBFBFBLRL
+BFFBFBFRLR
+FFBBFFBRRR
+BFBBBBBLLL
+BBFFFFFRRL
+BBFFFFFLRL
+FFFBBFFLRL
+BFBBFBFRLL
+FFFBBBBLLL
+FFFFFBFLRL
+FFFFBBFLRR
+FBFFFBFRRR
+BFFBBBBLLL
+BBFBBFFRRL
+BFFFBBFLLR
+FBBBFFFLLL
+FFBFFBBRRL
+BFBBBFBLRR
+BFFBBBFLRL
+BFBBBBBRLL
+FFFBBBFRLR
+FFFFBFFRRL
+FFBFBFFLLL
+BBFBFFFLRL
+BFFFBBFLRR
+FFFBFBFRLL
+BFBFFBBLRR
+FFFBFBBLLR
+BBFFFFFRLR
+FFBFBFFRRL
+FFFFFBBLRL
+FBBBFBFRRL
+FBBBBFBLLL
+FFFFBBBRLR
+FBBBBFFLRL
+BFBBBBBRRL
+BBFFBFBLLR
+FBFBFFFLRL
+FBFFFBFRRL
+FFFBBFBLRL
+BFFFFFBLLL
+BFFBFBFLLL
+FFFFBBFRRL
+FFFBFBBRLR
+FBFBBBBRRR
+FBFFBBBLLL
+FFBBBBFRRR
+BFFFFBFRLL
+BBFBFBBRLR
+BFFBBBFLRR
+FBBFBFFRRL
+FFFFFBFLLL
+BBFBFBFLRR
+FFBFBBFLRL
+BFFBBFBRLR
+FFBBBFFRLR
+FFFBBFBRLR
+FBFBBBBLLR
+BFFBBBBLLR
+BBFBFBFLRL
+BBFFFFFRRR
+FFFBFFFRRL
+FBBFFBFRRR
+BBFFBFFRLL
+FFBBFBFRLL
+FFFFBFBLLR
+BBFFBBFRLL
+BFBBBBFLRL
+FBFFBFFRLR
+BFBFBBFLLL
+FFFFBBFLLL
+BFBBBBBLRL
+FFBFBFBLRR
+BFFFFFBRRR
+FBFBBBBLRL
+FBBFBBFLLR
+FBBFFFFRRL
+FBFFFBFLLL
+FBFFBBBRRL
+FFBFFFFRLR
+FBBFBBBRLL
+FFFFBFBRLR
+FFBFBBBRRL
+BFFBFBFRRL
+FFBFFBFLLL
+BFFBFBFLRR
+BBFBFFBLRL
+BBFFBFFLLR
+BFBBBBFLLL
+BBFBBFFRRR
+BBFFFBBLRR
+BFBFFBFRRL
+FBBFBFBLRR
+BBFBBBFRRR
+FFFBBFBLLR
+FFFBFFFLLL
+FBBBFBFLLR
+BFBBFBFLLL
+BFBFBFBLLL
+BBFFBBFLRR
+FFFBFBFLRR
+BFFFFFFRLR
+BBFBFBBRRR
+BBFFFBFRLL
+FFFFBBFRLL
+FBBFBBFRLL
+FBFFFFBRRR
+FBFFBBFLLR
+BFFBFFBLLR
+FFBFFBFLRR
+FBFFBFBRLR
+FBFBBFFLLL
+FBBFFFBRRL
+FBFBFBFRRL
+FFBFBFBRRR
+FBFBFBFLRL
+FFFBFBBRLL
+FBBBFFFLLR
+FFBBBBFRLL
+FBFFFBBRLL
+BFFBFFBLRR
+FBBFBBFLRL
+FBFFFBBRRR
+FBFFFBBLLR
+BFFBFFBRRR
+FBBBFBFRRR
+FBFFFFFRLL
+BBFBBBFRLL
+FFFBFFBLLL
+FFBFFFFLRR
+FBFFFBBRRL
+BBFFBFFRLR
+FBFBFBBLLL
+FBBBBBBLLR
+FBFBBFBLLL
+BBFBFFFLRR
+BFFFFBBRRL
+BBFFFBFLRR
+FFBFFFBRLL
+FFFFBBBLRL
+BFBBBFFRLL
+BBFBFFFRLL
+FBFBBBBLLL
+BBFBBFBRLR
+BBFFBFBRLR
+BFBFFFFLRL
+FBBBFBFRLR
+FFBFFFBRLR
+FBBBBBFLLR
+FFBBBFBLLR
+BFFBBFBRRL
+BBFFBFFRRL
+FFFFFFBRRR
+FFBBFBBRRR
+FBBBBBBRRL
+BFFBBFFRRL
+FBBFBFBRLR
+FBBFFFFRLL
+FBBBBBFLLL
+FBBFFFBRRR
+BFFFFBBLRL
+FFFFBFBLLL
+FBFBFFFLLL
+FBFBBFBLRR
+FFFFBFFLRR
+FFFBBBFLRR
+FBFFBFFLLR
+BBFFBFFLLL
+FFBFFBFRRL
+BFBBFBBRRR
+BBFFFBFLLL
+FBFFBFBLLL
+BFFBFFBRRL
+BBFBFFBLRR
+FBFBFFFLRR
+BFBBFBBLLR
+BFFBBFFRRR
+FFFFFFBRRL
+BBBFFFFLLR
+BFBFFBFLLL
+FBBBBBFRRL
+BFFBBBBRLR
+FFBBFBFLRL
+FBFBFFBLRL
+FFBBBBFRLR
+BBFBBFBRRL
+FFFFFBFLLR
+FBFBFBFLLL
+BFBFBFBLLR
+FFFBFFFRLL
+BFFBBFBLLR
+FFBBFBBRLL
+FFFBBFBRRL
+FBBFFBBLLL
+FFFBBBBRLR
+FFFBBFBRRR
+BBFFBBBRRL
+FBBFBFFLRL
+FBBBBBFLRR
+BBFBFFBRRL
+FFFBFBFLLL
+FBBBFFFRLL
+BFFBFBFLLR
+FFBBBBBRRL
+BFFBBFFLRR
+FBBFBFBRLL
+BFFFBFFRRL
+BBFFFFBLLR
+BBFFBBFRLR
+BFFFBBFRRR
+FBFBBFBRLR
+FFFFFBBRLL
+FBBFFFBRLL
+BFFFFFBRLL
+BFFFBFBLRR
+BFFBFFBRLR
+FFFFBFBLRL
+FFBFFBFLLR
+FBBFBFFLLL
+BFFBFBFRRR
+BBFBBBFLRL
+BBBFFFFLRR
+BFBBFFFLLR
+FBBFFFBRLR
+FFFFFBFRRL
+FFFBFBBRRL
+BBBFFFBLRR
+FFBFBBFRRL
+FFBBFFBLRR
+BBFFBBBLLL
+BFBFBBBRRL
+BFFFBFBRLL
+FFBFBBBRLL
+FBFBFBFLRR
+FBFFFBBLLL
+FBBFFBFLLR
+BFFFFBFRRL
+FFBBBFFRRL
+FFBFBFFLRL
+BBFBBBFLLR
+FBBFFBFRLR
+FBBFFBBRLL
+BFBFFFBRLR
+BFFFBFFRLL
+BBFBFBBRLL
+BFFFFFFRLL
+FBFBBBFRLL
+BFBBFBFLRR
+BFBFBBBRLL
+BBFBBBFRRL
+BFFBBFBRRR
+BFBFFBFLLR
+FBFBFBFLLR
+FFFFFBBRRL
+FBFBBBFRLR
+FBFFBBFLLL
+FFBFBFFRLR
+BBFBFBBLLL
+FFFFBFFLRL
+FBBFBBFLLL
+BFBFBBFLRL
+FFFFBBFLLR
+BFBBFBBRRL
+FBBBFFBRRL
+FBBBBFFRLL
diff --git a/src/bin/day_5.rs b/src/bin/day_5.rs
new file mode 100644
index 0000000..15c8a70
--- /dev/null
+++ b/src/bin/day_5.rs
@@ -0,0 +1,157 @@
+use bevy::prelude::*;
+use std::fs::File;
+use std::io::{BufRead, BufReader};
+
+fn main() {
+ App::build()
+ .add_resource(WindowDescriptor {
+ title: "Advent of Code".to_string(),
+ width: 1920,
+ height: 1080,
+ ..Default::default()
+ })
+ .add_resource(ClearColor(Color::rgb(0., 0., 0.)))
+ .add_startup_system(setup_camera.system())
+ .add_startup_system(read_input_file.system())
+ .add_startup_stage("search")
+ .add_startup_system_to_stage("search", find_unoccupied_seat.system())
+ .add_startup_stage("metadata")
+ .add_startup_system_to_stage("metadata", add_seat_ids.system())
+ .add_startup_system_to_stage("metadata", add_seat_sprites.system())
+ .add_startup_stage("report")
+ .add_startup_system_to_stage("report", print_highest_seat_id.system())
+ .add_startup_system_to_stage("report", print_my_seat_id.system())
+ .add_plugins(DefaultPlugins)
+ .run();
+}
+
+fn setup_camera(mut commands: Commands, mut materials: ResMut<Assets<ColorMaterial>>) {
+ commands.spawn(Camera2dComponents {
+ transform: Transform::from_translation(Vec3::new(80. / 2., 1280. / 2., 0.)),
+ ..Default::default()
+ });
+
+ commands.insert_resource(Materials {
+ my_seat_material: materials.add(Color::rgb(0., 0., 255.).into()),
+ seat_material: materials.add(Color::rgb(0., 255., 0.).into()),
+ });
+}
+
+struct Materials {
+ my_seat_material: Handle<ColorMaterial>,
+ seat_material: Handle<ColorMaterial>,
+}
+
+#[derive(PartialEq, Eq)]
+struct Position {
+ x: u32,
+ y: u32,
+}
+struct SeatId(u32);
+struct MySeat;
+
+fn read_input_file(mut commands: Commands) {
+ let f = File::open("./inputs/day_5.txt").unwrap();
+ for line in BufReader::new(f).lines() {
+ let mut max_y = 128;
+ let mut min_y = 0;
+ let mut max_x = 8;
+ let mut min_x = 0;
+ for c in line.unwrap().trim().chars() {
+ let mid_x = (min_x + max_x) / 2;
+ let mid_y = (min_y + max_y) / 2;
+ match c {
+ 'F' => {
+ max_y = mid_y;
+ }
+ 'B' => {
+ min_y = mid_y;
+ }
+ 'L' => {
+ max_x = mid_x;
+ }
+ 'R' => {
+ min_x = mid_x;
+ }
+ _ => panic!("Unexpected character {}", c),
+ }
+ }
+
+ assert_eq!(max_y - min_y, 1);
+ assert_eq!(max_x - min_x, 1);
+
+ commands.spawn((Position { x: min_x, y: min_y },));
+ }
+}
+
+fn find_unoccupied_seat(mut commands: Commands, seats: Query<&Position>) {
+ for y in 1..127 {
+ for x in 0..8 {
+ let potential_position = Position { x, y };
+ let required_left = if x == 0 {
+ Position { x: 7, y: y - 1 }
+ } else {
+ Position { x: x - 1, y }
+ };
+ let required_right = if x == 7 {
+ Position { x: 0, y: y + 1 }
+ } else {
+ Position { x: x + 1, y }
+ };
+
+ let required_surrounds = [required_left, required_right];
+ if !seats.iter().any(|p| p == &potential_position) {
+ if required_surrounds
+ .iter()
+ .all(|required| seats.iter().any(|p| p == required))
+ {
+ commands.spawn((MySeat, potential_position));
+ }
+ }
+ }
+ }
+}
+
+fn add_seat_ids(mut commands: Commands, seats: Query<(Entity, &Position)>) {
+ for (entity, position) in seats.iter() {
+ let seat_id = position.y * 8 + position.x;
+ commands.insert_one(entity, SeatId(seat_id));
+ }
+}
+
+fn add_seat_sprites(
+ mut commands: Commands,
+ materials: Res<Materials>,
+ seats: Query<(Entity, &Position, Option<&MySeat>)>,
+) {
+ for (entity, position, my_seat) in seats.iter() {
+ commands.insert(
+ entity,
+ SpriteComponents {
+ sprite: Sprite::new(Vec2::new(10., 10.)),
+ material: if my_seat.is_some() {
+ materials.my_seat_material.clone()
+ } else {
+ materials.seat_material.clone()
+ },
+ transform: Transform::from_translation(Vec3::new(
+ position.x as f32 * 10.,
+ position.y as f32 * 10.,
+ 0.,
+ )),
+ ..Default::default()
+ },
+ );
+ }
+}
+
+fn print_highest_seat_id(seats: Query<&SeatId>) {
+ let max = seats.iter().map(|s| s.0).max();
+ println!("Max seat id: {:?}", max);
+}
+
+fn print_my_seat_id(seats: Query<With<MySeat, &SeatId>>) {
+ for seat_id in seats.iter() {
+ println!("My seat id: {}", seat_id.0);
+ }
+}