forked from ggriffiniii/aoc
Compare commits
No commits in common. "3442a6e66a2d2173b80526a73a88abd3b21ddcea" and "4aded98a24679d4bf9fa92cac8953078ca5940e9" have entirely different histories.
3442a6e66a
...
4aded98a24
78
README.md
78
README.md
@ -1,47 +1,37 @@
|
|||||||
|
# Results
|
||||||
|
|
||||||
|
## Day 1
|
||||||
```
|
```
|
||||||
Advent of code 2020
|
AOC 2020
|
||||||
Day 1 - Part 1: 1016964
|
Day 1 - Part 1 : 1016964
|
||||||
generator: 19.462µs,
|
generator: 14.063µs,
|
||||||
runner: 638ns
|
runner: 524ns
|
||||||
|
|
||||||
Day 1 - Part 2: 182588480
|
|
||||||
generator: 13.395µs,
|
|
||||||
runner: 397ns
|
|
||||||
|
|
||||||
Day 2 - Part 1: 586
|
|
||||||
generator: 133ns,
|
|
||||||
runner: 143.612µs
|
|
||||||
|
|
||||||
Day 2 - Part 2: 352
|
|
||||||
generator: 182ns,
|
|
||||||
runner: 128.948µs
|
|
||||||
|
|
||||||
Day 3 - Part 1: 265
|
|
||||||
generator: 70.461µs,
|
|
||||||
runner: 74.25µs
|
|
||||||
|
|
||||||
Day 3 - Part 2: 3154761400
|
|
||||||
generator: 59.863µs,
|
|
||||||
runner: 398.929µs
|
|
||||||
|
|
||||||
Day 4 - Part 2: 186
|
|
||||||
generator: 133ns,
|
|
||||||
runner: 156.514µs
|
|
||||||
|
|
||||||
Day 5 - Part 1: SeatId(933)
|
|
||||||
generator: 194ns,
|
|
||||||
runner: 62.802µs
|
|
||||||
|
|
||||||
Day 5 - Part 2: SeatId(711)
|
|
||||||
generator: 159ns,
|
|
||||||
runner: 70.564µs
|
|
||||||
|
|
||||||
Day 6 - Part 1: 6633
|
|
||||||
generator: 158ns,
|
|
||||||
runner: 162.734µs
|
|
||||||
|
|
||||||
Day 6 - Part 2: 3202
|
|
||||||
generator: 116ns,
|
|
||||||
runner: 138.78µs
|
|
||||||
|
|
||||||
|
Day 1 - Part 2 : 182588480
|
||||||
|
generator: 12.763µs,
|
||||||
|
runner: 265ns
|
||||||
|
```
|
||||||
|
|
||||||
|
## Day 2
|
||||||
|
```
|
||||||
|
AOC 2020
|
||||||
|
Day 2 - Part 1 : 586
|
||||||
|
generator: 251ns,
|
||||||
|
runner: 138.555µs
|
||||||
|
|
||||||
|
Day 2 - Part 2 : 352
|
||||||
|
generator: 153ns,
|
||||||
|
runner: 92.312µs
|
||||||
|
```
|
||||||
|
|
||||||
|
## Day 3
|
||||||
|
```
|
||||||
|
AOC 2020
|
||||||
|
Day 3 - Part 1 : 265
|
||||||
|
generator: 59.882µs,
|
||||||
|
runner: 66.355µs
|
||||||
|
|
||||||
|
Day 3 - Part 2 : 3154761400
|
||||||
|
generator: 48.977µs,
|
||||||
|
runner: 346.939µs
|
||||||
```
|
```
|
||||||
|
|||||||
1138
input/2020/day4.txt
1138
input/2020/day4.txt
File diff suppressed because it is too large
Load Diff
@ -1,927 +0,0 @@
|
|||||||
BBFBFFBRLL
|
|
||||||
FBFBFFBRRR
|
|
||||||
BBBFBFFLLR
|
|
||||||
BFBBFFBRRL
|
|
||||||
BBFFBBBRRL
|
|
||||||
BFFFFFBLRR
|
|
||||||
FBBBFBFLLL
|
|
||||||
FBBFBFFLRR
|
|
||||||
FBFFFFBRLR
|
|
||||||
FBFBFBFLRL
|
|
||||||
FFBBFFFLRR
|
|
||||||
BFFBBBFRRL
|
|
||||||
FFBBFBBRRR
|
|
||||||
BFFBBFFRRR
|
|
||||||
FBBFBBFRLR
|
|
||||||
BFFFFBBLRL
|
|
||||||
BFFBFFBRLL
|
|
||||||
BFFFBFFRLL
|
|
||||||
BBFFFBFRLL
|
|
||||||
FFFFBFBLLR
|
|
||||||
FBFBFFBLRR
|
|
||||||
FBBFFFFRRL
|
|
||||||
FBBFFFFLRL
|
|
||||||
BBFBFFFLRR
|
|
||||||
FFBFBBFLLR
|
|
||||||
FFFFBFBRRL
|
|
||||||
BFFFBBBLRR
|
|
||||||
BBFBFBFRRL
|
|
||||||
FFBFBFBRRL
|
|
||||||
FFFBBBBRRL
|
|
||||||
FBBBBBBLLR
|
|
||||||
FFFFFBFRLR
|
|
||||||
FBBFBBBRRL
|
|
||||||
FBBBBFFRLR
|
|
||||||
FFBBBFFRLR
|
|
||||||
FFBBBFFLRR
|
|
||||||
FFBBBBBRLR
|
|
||||||
FFBFFFBRLR
|
|
||||||
FBFBFFBLRL
|
|
||||||
BFBBBBFRRR
|
|
||||||
FBFFBFFRRL
|
|
||||||
BFFFBFFLRL
|
|
||||||
BBFBFBBRRR
|
|
||||||
BFBFBFFLRR
|
|
||||||
BFFFBBBRRR
|
|
||||||
FBBFFBFLRR
|
|
||||||
BFFBFBFLRL
|
|
||||||
BFBBBFBRRL
|
|
||||||
BFBFBFBRRR
|
|
||||||
FFFBBFFRLR
|
|
||||||
FFFFBBBLRR
|
|
||||||
BFBFFBBRLL
|
|
||||||
BBFFBBBLLR
|
|
||||||
FBFFFBFLLL
|
|
||||||
FFBFBBFRRL
|
|
||||||
FFFBBFFLLR
|
|
||||||
FBBFFFBRRL
|
|
||||||
FBFFBBBLRL
|
|
||||||
FFBBFBBLLL
|
|
||||||
FBBBBBBRRR
|
|
||||||
FBBBBFFLRR
|
|
||||||
FBFFFFFLLL
|
|
||||||
FBFBFBFLLL
|
|
||||||
BBFFBFBLRL
|
|
||||||
FBFBBFFRLR
|
|
||||||
FFFBFFBRLL
|
|
||||||
FFBFFBFRRL
|
|
||||||
FBBFFFFLRR
|
|
||||||
FBFFFFFRLR
|
|
||||||
FFFBFBBLLR
|
|
||||||
FBBBFFBRLL
|
|
||||||
BBFFBBFLRR
|
|
||||||
FBBFBBFLLL
|
|
||||||
FFBFBBBLRR
|
|
||||||
FFFFFFBLLL
|
|
||||||
BFFFBBFLLR
|
|
||||||
FFFFBBFLLL
|
|
||||||
BFBFBFBLRL
|
|
||||||
BFBBFFBRRR
|
|
||||||
BFBBFBBRLR
|
|
||||||
FFFBFFFLRL
|
|
||||||
BBFBBBBLRL
|
|
||||||
FFBFBBBRRR
|
|
||||||
BFFFBFBRLL
|
|
||||||
BBFFFBFRRR
|
|
||||||
BFFFFFFRRL
|
|
||||||
BFBBFFFRLR
|
|
||||||
FFFFBFBLRL
|
|
||||||
FBFBFFBLLR
|
|
||||||
BBFFFBFRLR
|
|
||||||
FFBBFFFRLL
|
|
||||||
FBBBFBFRRR
|
|
||||||
BFFBBFFLLR
|
|
||||||
FFFFBFBRRR
|
|
||||||
FBFFFBBRLL
|
|
||||||
FBBFFFBRLR
|
|
||||||
BFBFBBFLLL
|
|
||||||
BFFBFFBRRR
|
|
||||||
FFBBBFBRLL
|
|
||||||
BFBFFBBLLL
|
|
||||||
FFBFFBBLLL
|
|
||||||
FFBBFBFRLL
|
|
||||||
BFFFBBFLRL
|
|
||||||
BBFBBFFLRL
|
|
||||||
BFBBFFFRLL
|
|
||||||
BBFFFFFRLR
|
|
||||||
FFFBBFBLRR
|
|
||||||
BBFFBBBRRR
|
|
||||||
FBFFFBFRRL
|
|
||||||
BFBFFBFRRR
|
|
||||||
FBFBBFFLRR
|
|
||||||
FBBFFBFLRL
|
|
||||||
FBBBBFBLLL
|
|
||||||
BFBFFBFLRR
|
|
||||||
BFFBFBBRLR
|
|
||||||
FFBBBFBRRR
|
|
||||||
FBBBBBFLRL
|
|
||||||
BFBBFFBRLL
|
|
||||||
BFFBFBBRRL
|
|
||||||
BBBFFBFRRR
|
|
||||||
FBBFFBBRLL
|
|
||||||
BFFFFBBLLL
|
|
||||||
BFBBBFBRLL
|
|
||||||
BFFFBBFRLR
|
|
||||||
FFBFFFBLLR
|
|
||||||
BFBBFFFRRL
|
|
||||||
BFFBFBFRRR
|
|
||||||
FBFFBFBRLR
|
|
||||||
FBFFBBFLLR
|
|
||||||
BFFFFFBRRR
|
|
||||||
FFFFFBBRLR
|
|
||||||
FBBFFFBLLL
|
|
||||||
BFFFFFBRRL
|
|
||||||
BBBFFFFLRR
|
|
||||||
BFFFBBBRLL
|
|
||||||
BFFFFFBRLR
|
|
||||||
FFFBBBBLRL
|
|
||||||
FBBFFBBLRL
|
|
||||||
FBBBBFFLLR
|
|
||||||
BFBFBFBRLL
|
|
||||||
FBFBBFFLLR
|
|
||||||
FFFFFBFLLL
|
|
||||||
FBBBFFFRLL
|
|
||||||
BFBBFFFLLR
|
|
||||||
FBFBBFFRLL
|
|
||||||
FBFBBFBLLL
|
|
||||||
FBFBFFBRLL
|
|
||||||
BBBFFFBRRL
|
|
||||||
FFBBFBFLLR
|
|
||||||
FFFFFFBRLL
|
|
||||||
BFBFBFBRRL
|
|
||||||
BFFBFFBLLL
|
|
||||||
FBBFFFBRLL
|
|
||||||
FFFFBBBLLR
|
|
||||||
FFBFFFBLRL
|
|
||||||
FBFBBBBRRR
|
|
||||||
FFBFBBBRLL
|
|
||||||
BFBFBFFRRR
|
|
||||||
FBBFBFFRRR
|
|
||||||
FBBFFFBLLR
|
|
||||||
FBBBFFFLRR
|
|
||||||
BBFFFFFRLL
|
|
||||||
FBBBBBBRLR
|
|
||||||
BFBFBBBRLL
|
|
||||||
BBFFBBFRRL
|
|
||||||
BBFFFFFLLR
|
|
||||||
FFBFFFBRLL
|
|
||||||
BBFBBFBLLL
|
|
||||||
FFBFFBFLRR
|
|
||||||
FBBBFFBRRR
|
|
||||||
FBFBFBFRRL
|
|
||||||
FBFBFBBRLL
|
|
||||||
FFFFFFBRRL
|
|
||||||
FBBFFBFRLR
|
|
||||||
FBFFFBFRLL
|
|
||||||
FFBBFFBRRL
|
|
||||||
FBFFBBBLLL
|
|
||||||
FFFBFBFLRL
|
|
||||||
BBFFFFBRRR
|
|
||||||
FFBFBFBLRL
|
|
||||||
FBBBFFFLLR
|
|
||||||
FBBBFFFRRR
|
|
||||||
BFFFFBBRRL
|
|
||||||
BFFBBBFLLR
|
|
||||||
BBBFFBFRLR
|
|
||||||
FBFBFBFLRR
|
|
||||||
FFFFBFBLLL
|
|
||||||
BFBBFFBLLL
|
|
||||||
FFFFBBFRLL
|
|
||||||
FFBBFFFRRR
|
|
||||||
BBFBFBFLRL
|
|
||||||
FFBBBBBRRR
|
|
||||||
FBBBFBBLLR
|
|
||||||
FBBBFBBRRL
|
|
||||||
FBFBFBFLLR
|
|
||||||
BFFFBFFLLR
|
|
||||||
BBBFFBBLRL
|
|
||||||
FFFFFBBLLL
|
|
||||||
FBFBBBFLLR
|
|
||||||
FBFBFBBRRR
|
|
||||||
BFFFBBFRLL
|
|
||||||
BFFBFFFLRL
|
|
||||||
FFFFFBBLRR
|
|
||||||
BFFBFFBLRL
|
|
||||||
FBBFFBBRRR
|
|
||||||
FFBFFBFLRL
|
|
||||||
FBFFBBBLLR
|
|
||||||
BBFBBFBRLR
|
|
||||||
BFBBFFFLLL
|
|
||||||
FBFBBBFRLL
|
|
||||||
BFFFFBFLRL
|
|
||||||
BBFBBFFRRR
|
|
||||||
BBFBBBFRRR
|
|
||||||
FFBFFFBRRL
|
|
||||||
FFFFFFFRRR
|
|
||||||
FBBFBBBRRR
|
|
||||||
BBBFFBFLLR
|
|
||||||
BFFBFFBRLR
|
|
||||||
FFBFFFBLRR
|
|
||||||
BBFFFBFLRR
|
|
||||||
BBBFFFBLRL
|
|
||||||
FFBBFBFLLL
|
|
||||||
BBFBFFBRLR
|
|
||||||
BFBFFBFLRL
|
|
||||||
FBFFFBBLLL
|
|
||||||
FBBBBBFLLR
|
|
||||||
BFBFFFBLRL
|
|
||||||
FFFBBBBLLL
|
|
||||||
FBBFBBFRRL
|
|
||||||
FBBFFBFLLL
|
|
||||||
FFBBBFFRRL
|
|
||||||
BFFFBBFRRR
|
|
||||||
FFBFBBFRLL
|
|
||||||
FFFBFFFRLL
|
|
||||||
FBBFFFBLRR
|
|
||||||
BBFFBBBLLL
|
|
||||||
FBFFBFFRLR
|
|
||||||
BBFBFFFRLR
|
|
||||||
FBFBBFFLLL
|
|
||||||
BBFFFBBRLL
|
|
||||||
BBBFFBBLLL
|
|
||||||
BFBFFFFRLR
|
|
||||||
FBFBBFBLLR
|
|
||||||
FBFFFBFLLR
|
|
||||||
FFBBFBFLRR
|
|
||||||
BFFBFFFLLR
|
|
||||||
BBBFFFBRLR
|
|
||||||
BFBBBBBRRR
|
|
||||||
FFFBFFFRRL
|
|
||||||
FFBBBBBRRL
|
|
||||||
BBFBFBFLLR
|
|
||||||
BBFFFFFRRR
|
|
||||||
FBFFBBFRRL
|
|
||||||
FBFFBFBLRR
|
|
||||||
BFBFFFBRRL
|
|
||||||
FFFBFBFLRR
|
|
||||||
FFBBFFBRLR
|
|
||||||
BFFBFBFLRR
|
|
||||||
FBBBBBFLLL
|
|
||||||
BFBFFFBRRR
|
|
||||||
BBFBFBBRLR
|
|
||||||
BFFBFBBLLL
|
|
||||||
FBBFFFFRLR
|
|
||||||
BFBFBFFRRL
|
|
||||||
FFFFBBBRLR
|
|
||||||
FFFBBFFRLL
|
|
||||||
FBFFBBBRLL
|
|
||||||
FFBBBBBRLL
|
|
||||||
BFFFFBFRRR
|
|
||||||
FBBFBBFLRR
|
|
||||||
FFBFBFBRLR
|
|
||||||
FBFBFFBRRL
|
|
||||||
FFFFBFFLRR
|
|
||||||
BFBFBFFRLR
|
|
||||||
FFFFFFBRRR
|
|
||||||
BFBBBBFRLR
|
|
||||||
FFBFBBBLLR
|
|
||||||
FBBBFFBLRR
|
|
||||||
FFBFBFFLRL
|
|
||||||
BBBFFFBLLL
|
|
||||||
FFBFFFBLLL
|
|
||||||
BFBFFFBRLR
|
|
||||||
BFFFBFFLRR
|
|
||||||
FFBFBFFRRL
|
|
||||||
FFFFFBBRRR
|
|
||||||
FFBBFFFLLR
|
|
||||||
FBFFBFFRLL
|
|
||||||
FBFFBBFRLL
|
|
||||||
FFFFBBFLRL
|
|
||||||
FFFBFFFLLL
|
|
||||||
BFFBFBBRLL
|
|
||||||
FBFFFFFLLR
|
|
||||||
FFFFFBBRRL
|
|
||||||
FBFBFFFRRL
|
|
||||||
FBFBFBBRLR
|
|
||||||
FFBBFFBLRR
|
|
||||||
BBFFBFBLLR
|
|
||||||
BFFBFBFLLL
|
|
||||||
FBFBFFFLRL
|
|
||||||
FFFFBBFRRR
|
|
||||||
FFBFFFFRLL
|
|
||||||
FBFBBFBRRL
|
|
||||||
FBFBBFBRLR
|
|
||||||
BBFFFFBLRL
|
|
||||||
BFFFFBFRLL
|
|
||||||
FFBFBBFRLR
|
|
||||||
FFBFFBBLRR
|
|
||||||
BFFFFFFRRR
|
|
||||||
FBBBFBFLRL
|
|
||||||
FBFFBFBRRR
|
|
||||||
FBFFBFFRRR
|
|
||||||
BFBFBFBLLR
|
|
||||||
FBBBBBBRRL
|
|
||||||
BFBFBFBLRR
|
|
||||||
BBFFBFBLLL
|
|
||||||
BFFBBBBLRL
|
|
||||||
BFFBBBBLLR
|
|
||||||
FFBFFBBRLL
|
|
||||||
BBBFFBBRLR
|
|
||||||
BBBFFFFLLL
|
|
||||||
BFBBFBFLRL
|
|
||||||
BBFBFFBLLR
|
|
||||||
FFFBBFBRRL
|
|
||||||
BFBBFBBLRL
|
|
||||||
FFFFBFFRLL
|
|
||||||
FFBBBFFLLR
|
|
||||||
FFBBBFBRRL
|
|
||||||
FFBFFFFRRL
|
|
||||||
FBBFFFBLRL
|
|
||||||
BBFFFBBLRR
|
|
||||||
FFBBBBBLLR
|
|
||||||
BBFBBBBRLL
|
|
||||||
BFFFBFFRRR
|
|
||||||
FFFFBBBRLL
|
|
||||||
FFBFFBBLLR
|
|
||||||
BFBBFBFRRL
|
|
||||||
FFBFBBFLRL
|
|
||||||
FBFFFFBRRL
|
|
||||||
BFFFFFBLRL
|
|
||||||
FFFBBFBLLL
|
|
||||||
FBFFFFBLRL
|
|
||||||
BFBBFFFLRR
|
|
||||||
FBBBFBBLRR
|
|
||||||
BFBBBBBLLR
|
|
||||||
FFBFFBFRLR
|
|
||||||
FFBFBBBLRL
|
|
||||||
FBFFFBFRLR
|
|
||||||
FFBBFFBLLR
|
|
||||||
BBFFBBFRLR
|
|
||||||
BBFFFBBRRR
|
|
||||||
BBFFBBFRLL
|
|
||||||
FFBBFFBLLL
|
|
||||||
FBBBBFBLRL
|
|
||||||
FFFFBBBLRL
|
|
||||||
BBFBBBBRRR
|
|
||||||
FFBFBFBLLL
|
|
||||||
BFFFFBBLLR
|
|
||||||
BFFBFFFRLR
|
|
||||||
BFBFBFFLRL
|
|
||||||
FFFBBBBRLR
|
|
||||||
FFBBBBBLRL
|
|
||||||
BFBBBBBLRL
|
|
||||||
BBFFFFFLRR
|
|
||||||
FBBBFFFLRL
|
|
||||||
FBFBFFBRLR
|
|
||||||
BFFBFFFLRR
|
|
||||||
FFFFFBFLLR
|
|
||||||
BFBBBBFLRR
|
|
||||||
BFBBBFBLLL
|
|
||||||
BBFBBFBRRL
|
|
||||||
BBFFBFFLRL
|
|
||||||
BFBBBBBRLL
|
|
||||||
FBBFBBBRLR
|
|
||||||
BBFFBBBLRR
|
|
||||||
FFFBBFBLLR
|
|
||||||
BFFFBBBLRL
|
|
||||||
FFFBFBBRLL
|
|
||||||
BBFBBFFRLR
|
|
||||||
BFBFFBBRRR
|
|
||||||
FFFBFBFRRL
|
|
||||||
FFFBFFFLLR
|
|
||||||
BBBFBFFRLR
|
|
||||||
FFFBFFFRLR
|
|
||||||
FBBFBFBRRR
|
|
||||||
FFBBBBFRRR
|
|
||||||
FBBBFBFLLR
|
|
||||||
BBBFBFFLRL
|
|
||||||
FFBBFFFRLR
|
|
||||||
FFFBFFFRRR
|
|
||||||
FFBFFFFLLR
|
|
||||||
BFFBBFBLRR
|
|
||||||
FBFFBFBLRL
|
|
||||||
BBFBFBFRRR
|
|
||||||
BBBFFFFLLR
|
|
||||||
FBFFBFFLRR
|
|
||||||
BFFFFFFLLL
|
|
||||||
FBFBBFBRLL
|
|
||||||
FFBFBFFRLL
|
|
||||||
FBFFBFBLLL
|
|
||||||
FFBBBBBLLL
|
|
||||||
FFFFBFFLLL
|
|
||||||
FBBBBFBRLR
|
|
||||||
FFBBBBFLLL
|
|
||||||
FFBBBFFRLL
|
|
||||||
FFFBFBFLLL
|
|
||||||
BFBBBBBLLL
|
|
||||||
FBBFFFFRRR
|
|
||||||
BFFBBFBRLR
|
|
||||||
FBFFFBBLRL
|
|
||||||
FBBFBFBLRR
|
|
||||||
BBFFFFBLLR
|
|
||||||
FFBBBBFLRR
|
|
||||||
FFBFBBFLRR
|
|
||||||
BBFBBFBRRR
|
|
||||||
FBFBFBFRLL
|
|
||||||
BFBFBBBLLL
|
|
||||||
BFBBBFBRLR
|
|
||||||
FFFBFBFRLR
|
|
||||||
BFBBBFFRRR
|
|
||||||
FFFFBBBLLL
|
|
||||||
BFBFBBBRRR
|
|
||||||
FBBBBFFRRL
|
|
||||||
BBFBFFFLLL
|
|
||||||
FBBBFBFRLR
|
|
||||||
BFBBBFFLLR
|
|
||||||
FBFFFFFLRL
|
|
||||||
BFBFFBFLLL
|
|
||||||
BFFFFBFLLL
|
|
||||||
BFBBFFBLLR
|
|
||||||
FBBFBBBRLL
|
|
||||||
FFFBBBFLRR
|
|
||||||
FBBBBFFLLL
|
|
||||||
FFBBBBFLLR
|
|
||||||
BFBFBFBLLL
|
|
||||||
BFBFBBFRLR
|
|
||||||
FBBFBBFRLL
|
|
||||||
FBFFFBFLRR
|
|
||||||
BFFBBFFRRL
|
|
||||||
FFFBBFBLRL
|
|
||||||
FBFFFFFRLL
|
|
||||||
BFFFFBFRRL
|
|
||||||
FFFBBBBRLL
|
|
||||||
BFFBFFBRRL
|
|
||||||
FBBFFFFLLL
|
|
||||||
FFBBFBBLRR
|
|
||||||
BFBFFFBLLL
|
|
||||||
BFBFFFFLLR
|
|
||||||
BBFBFFBRRR
|
|
||||||
BBFBBFFRLL
|
|
||||||
FFFBBBFLLR
|
|
||||||
BFFBBBBRRR
|
|
||||||
FBBBBBBLRR
|
|
||||||
FFBFFBBLRL
|
|
||||||
FBBFFBBRLR
|
|
||||||
BFFFBFFRLR
|
|
||||||
FBBBFFBLLL
|
|
||||||
FFFBFBFRLL
|
|
||||||
BFFBFFFRRL
|
|
||||||
BFFFBFBRRR
|
|
||||||
BFBFFFFLRR
|
|
||||||
FFFBFBBLRR
|
|
||||||
BBFBBBFLLL
|
|
||||||
FBBFBFFRLR
|
|
||||||
BBFFBBFLLL
|
|
||||||
FBFFBBFRRR
|
|
||||||
BFFFBFBLRL
|
|
||||||
BFFFFBFLRR
|
|
||||||
BFFFFBFRLR
|
|
||||||
BBFFBBBRLR
|
|
||||||
FBBFBFBRLL
|
|
||||||
FBFBBFFRRL
|
|
||||||
BBFFBFBLRR
|
|
||||||
FBBFFBBLRR
|
|
||||||
BBFFBFBRRL
|
|
||||||
FFBBBBFLRL
|
|
||||||
FFFBFBFLLR
|
|
||||||
BBBFFFFRLR
|
|
||||||
BFBFFBBRLR
|
|
||||||
BFFBBFFRLR
|
|
||||||
BFFFFFFLRR
|
|
||||||
BBFFFFBLRR
|
|
||||||
FFFFBFFLRL
|
|
||||||
FBBBBBFLRR
|
|
||||||
BFBFFFFRRR
|
|
||||||
FBBBFBFLRR
|
|
||||||
BFBFBBFRLL
|
|
||||||
FBBFBBFLLR
|
|
||||||
FBFFFFFRRR
|
|
||||||
FBBFFBFRLL
|
|
||||||
FBFBFFFRLR
|
|
||||||
FFBBBFBLLR
|
|
||||||
FBBBBFFLRL
|
|
||||||
BBFFFFBRLL
|
|
||||||
FBBBBBFRRL
|
|
||||||
FBBBBFFRLL
|
|
||||||
BBFFBFBRLR
|
|
||||||
FBFBFBBRRL
|
|
||||||
FBBFBFBLLL
|
|
||||||
FBFFBFBLLR
|
|
||||||
BFBBBFFLLL
|
|
||||||
FFBFFBBRRL
|
|
||||||
BBFBFBBLLL
|
|
||||||
FBBBFFFLLL
|
|
||||||
FBFBBBBLLL
|
|
||||||
FBFFBFFLLL
|
|
||||||
FFFBBFFLRL
|
|
||||||
BBFFBBBLRL
|
|
||||||
BFFFBFBRLR
|
|
||||||
BBFFFFBRLR
|
|
||||||
BBFBBBBLLR
|
|
||||||
BFFBBFBLLR
|
|
||||||
FFFBBFBRLL
|
|
||||||
BBFFFBFRRL
|
|
||||||
FFBFFFBRRR
|
|
||||||
BBFBFBBRLL
|
|
||||||
FBFBFBBLLR
|
|
||||||
FBBFFBFRRR
|
|
||||||
FBBBFFBLLR
|
|
||||||
BFFFBBBRRL
|
|
||||||
BFFBBFBLRL
|
|
||||||
FBFFBBFLLL
|
|
||||||
BFBFBFFRLL
|
|
||||||
BFBBBFBLLR
|
|
||||||
FBFFBFFLLR
|
|
||||||
FBBFBFFLLR
|
|
||||||
BFBFFFBLRR
|
|
||||||
FBBFFBBLLL
|
|
||||||
FFBFBFFLLL
|
|
||||||
FFBBFFBRLL
|
|
||||||
FFBFFBFRRR
|
|
||||||
FBFBFFFRLL
|
|
||||||
BBFBBFFLLL
|
|
||||||
FBFBBBBRLR
|
|
||||||
FFFBBBFRLL
|
|
||||||
FFBFFBFLLR
|
|
||||||
BFFFFBBRLR
|
|
||||||
FFBFBBBRRL
|
|
||||||
FFFFBFFRLR
|
|
||||||
FFBBFFFLLL
|
|
||||||
FBFFFFBLRR
|
|
||||||
FBBBBFBRLL
|
|
||||||
FBFFBBBLRR
|
|
||||||
FFFBBFBRRR
|
|
||||||
BFBBFBFRRR
|
|
||||||
BFFFBFBLRR
|
|
||||||
BFBFFBFRRL
|
|
||||||
FFFBBBBRRR
|
|
||||||
FBBFBFFRRL
|
|
||||||
BFBBFFBLRR
|
|
||||||
FBBFBBBLRR
|
|
||||||
BFBBFBBRRR
|
|
||||||
FFFFFBFLRR
|
|
||||||
FBFBBBFLRR
|
|
||||||
BBBFFFFRRL
|
|
||||||
BBFFFBFLLL
|
|
||||||
BBBFFFFLRL
|
|
||||||
FFBBBBBLRR
|
|
||||||
BBBFFBFLLL
|
|
||||||
FBFBFBBLRR
|
|
||||||
FFFBFFBLRR
|
|
||||||
FFBBBFBLLL
|
|
||||||
BBFFFBFLLR
|
|
||||||
FFFFBBFRRL
|
|
||||||
FBFBBFBLRL
|
|
||||||
BBFBBFFLRR
|
|
||||||
BFBFBFBRLR
|
|
||||||
FFBFFBFRLL
|
|
||||||
BFBBBFFRRL
|
|
||||||
FFBBFBBLRL
|
|
||||||
FBFFFFFRRL
|
|
||||||
FBFFFFBLLR
|
|
||||||
FFBFBFFRLR
|
|
||||||
BFBBFBFRLL
|
|
||||||
FBFBBBFRRR
|
|
||||||
FBFBBBBLRL
|
|
||||||
FFFBFFBRRL
|
|
||||||
BFFFBFBLLR
|
|
||||||
BFBFBBFLRL
|
|
||||||
BBFBFBBLLR
|
|
||||||
BBFFFFFLRL
|
|
||||||
FFFBBFFLRR
|
|
||||||
BFFBFBBLRR
|
|
||||||
BBFFBBBRLL
|
|
||||||
BFBBFBBRLL
|
|
||||||
BFFBBBFRRR
|
|
||||||
FBFBFFFRRR
|
|
||||||
FBFBFFFLLR
|
|
||||||
FFFBBBFLRL
|
|
||||||
BBFBBFFRRL
|
|
||||||
BFFFFFFRLR
|
|
||||||
FFBBBFBRLR
|
|
||||||
FFFFBBBRRR
|
|
||||||
FFFBFBBRLR
|
|
||||||
FBFBFFBLLL
|
|
||||||
BBFBFFBLRR
|
|
||||||
FBFFFFFLRR
|
|
||||||
FFFBFBBLRL
|
|
||||||
FBBBBFBLLR
|
|
||||||
FBBBFBBLLL
|
|
||||||
FFBBBBFRLL
|
|
||||||
FBFFFBFRRR
|
|
||||||
FFFBFFFLRR
|
|
||||||
BFFBFFBLLR
|
|
||||||
BBFBBBFRLR
|
|
||||||
BFBFFBBLRR
|
|
||||||
FFFBBFBRLR
|
|
||||||
BFBBFBFRLR
|
|
||||||
FBFFFBBLLR
|
|
||||||
FBFBFFFLRR
|
|
||||||
BFFFFBBRRR
|
|
||||||
BBFFFFBLLL
|
|
||||||
BFFBFFBLRR
|
|
||||||
BFBFFBFLLR
|
|
||||||
FBFBFBBLRL
|
|
||||||
BFFBBBFRLL
|
|
||||||
FFFFBFBRLL
|
|
||||||
FFBFFFFLRR
|
|
||||||
FBBFBBFRRR
|
|
||||||
BFFFBFBRRL
|
|
||||||
BFFFFBBLRR
|
|
||||||
FFFFFBBRLL
|
|
||||||
FBFFBBBRRR
|
|
||||||
FFFBBFFLLL
|
|
||||||
FFBFBFBRLL
|
|
||||||
BFFBFBBRRR
|
|
||||||
FFFFBBFLRR
|
|
||||||
FBBFBBFLRL
|
|
||||||
BBFFBBFLRL
|
|
||||||
FBBBFBFRRL
|
|
||||||
FFFBFBBLLL
|
|
||||||
FFFBFFBRLR
|
|
||||||
FFFFFBFLRL
|
|
||||||
BFFFFFBLLL
|
|
||||||
BFFBBFFLLL
|
|
||||||
FBBFBFBRLR
|
|
||||||
FBFBFBFRLR
|
|
||||||
FBBBBFBRRR
|
|
||||||
BFFFFFFLRL
|
|
||||||
BFBFBBBRLR
|
|
||||||
FBFBBBBRRL
|
|
||||||
BFBBBFFLRR
|
|
||||||
BFBFFFFRLL
|
|
||||||
BBFFFBBLRL
|
|
||||||
BBFFFFBRRL
|
|
||||||
BBFBFBBRRL
|
|
||||||
BFFBBBFLRR
|
|
||||||
BBBFFFBLLR
|
|
||||||
BBFFBFBRLL
|
|
||||||
FBBFFBFRRL
|
|
||||||
BFFFFFFLLR
|
|
||||||
FFFFFBBLLR
|
|
||||||
FBFBBFFLRL
|
|
||||||
BBFBFBFLLL
|
|
||||||
BBFBBBBLRR
|
|
||||||
FFBFFFFLLL
|
|
||||||
FBFFFBBRRR
|
|
||||||
BBFBFBBLRL
|
|
||||||
BFBBBBBRLR
|
|
||||||
FBBFBBBLRL
|
|
||||||
BBFBBBFRRL
|
|
||||||
BBFBFFFLRL
|
|
||||||
FFBFFFFRLR
|
|
||||||
FFFFBFFLLR
|
|
||||||
FBFBBBBLLR
|
|
||||||
BFBBFBFLLR
|
|
||||||
FBFFBBFRLR
|
|
||||||
BFFFBFBLLL
|
|
||||||
FBFBBBBLRR
|
|
||||||
BBFBFFFRRL
|
|
||||||
FBFBBBFLRL
|
|
||||||
BFFBBFBLLL
|
|
||||||
BFFBBBBRLR
|
|
||||||
FBBBFBBLRL
|
|
||||||
BFBBBFFRLL
|
|
||||||
BFBBBFBLRR
|
|
||||||
BFBFBBFRRL
|
|
||||||
BFBBFBFLRR
|
|
||||||
FBFFBBFLRR
|
|
||||||
BBBFFBFRLL
|
|
||||||
BBFBBFBLRL
|
|
||||||
BBFBFFFLLR
|
|
||||||
FBBBBBFRLL
|
|
||||||
FBFBFFFLLL
|
|
||||||
FFBFBFBLRR
|
|
||||||
FBBBFFFRRL
|
|
||||||
FFFFBBFRLR
|
|
||||||
FFBFBBBLLL
|
|
||||||
FBBFBFFLLL
|
|
||||||
BBBFFFBRLL
|
|
||||||
BFBFBBBLLR
|
|
||||||
BBFBBFBLLR
|
|
||||||
FFFFBFFRRL
|
|
||||||
FBFBBBFRLR
|
|
||||||
BFFBBFBRRR
|
|
||||||
BFBFBFFLLL
|
|
||||||
BFBBBFBRRR
|
|
||||||
FBFFBBBRLR
|
|
||||||
BFBBFFBRLR
|
|
||||||
BBFBBFFLLR
|
|
||||||
FFBBFBFRRR
|
|
||||||
BBFFFFFRRL
|
|
||||||
FBBFBBBLLR
|
|
||||||
BBBFFFFRLL
|
|
||||||
FBFFBFBRRL
|
|
||||||
BFFFFFFRLL
|
|
||||||
FBBBBBFRLR
|
|
||||||
FBBBBBBLLL
|
|
||||||
BFFFFFBLLR
|
|
||||||
BBBFFBFLRR
|
|
||||||
BFFFFBBRLL
|
|
||||||
BFBBFFFLRL
|
|
||||||
BBFBBBBRLR
|
|
||||||
FBFFBBBRRL
|
|
||||||
BBFFBFFLLR
|
|
||||||
BFFFBBBRLR
|
|
||||||
BFBBFBBLRR
|
|
||||||
BBBFBFFRLL
|
|
||||||
FBFFFFBRRR
|
|
||||||
BFBBBFFLRL
|
|
||||||
FBBFFFFRLL
|
|
||||||
FFBBFBBLLR
|
|
||||||
BFFBFFFRRR
|
|
||||||
BFBFFBBLRL
|
|
||||||
FBFBBBFLLL
|
|
||||||
FBBFFBBLLR
|
|
||||||
FBBBFBBRLL
|
|
||||||
FBFFFFBRLL
|
|
||||||
FBFBBFBRRR
|
|
||||||
FFBFFBBRRR
|
|
||||||
FBBBFFBRRL
|
|
||||||
FFBFBBFLLL
|
|
||||||
FFBFBFBRRR
|
|
||||||
FFBBFBFRLR
|
|
||||||
FFBBBBFRRL
|
|
||||||
FBBFFBFLLR
|
|
||||||
FBBFBFBLRL
|
|
||||||
FFBBBFFRRR
|
|
||||||
FFBFBFFLLR
|
|
||||||
BBFFBFBRRR
|
|
||||||
BFFBBBBRRL
|
|
||||||
FFFFFBFRRL
|
|
||||||
FBFFBFFLRL
|
|
||||||
FBBBFBFRLL
|
|
||||||
FFBBBFBLRR
|
|
||||||
FFFBFFBLLR
|
|
||||||
BFFBFBFRLL
|
|
||||||
FFFBFBBRRL
|
|
||||||
BFFBFFFRLL
|
|
||||||
FBBBFFBRLR
|
|
||||||
FFFBFBBRRR
|
|
||||||
BBFBFFFRLL
|
|
||||||
BBFFBFFLRR
|
|
||||||
BFFBFBFRRL
|
|
||||||
FFFBFFBLRL
|
|
||||||
BBBFFBFLRL
|
|
||||||
BFFBFBBLLR
|
|
||||||
FFBFBFBLLR
|
|
||||||
FFFBFBFRRR
|
|
||||||
FFBBFFBLRL
|
|
||||||
BBFFBBFLLR
|
|
||||||
FFBBFBBRLL
|
|
||||||
FFBBBBFRLR
|
|
||||||
FFFFBFBLRR
|
|
||||||
FFBFBFFLRR
|
|
||||||
BFBBBBBLRR
|
|
||||||
FBBFBFFLRL
|
|
||||||
FFFFFFBLRR
|
|
||||||
BFBBBBFLRL
|
|
||||||
BBBFFBBLLR
|
|
||||||
BFFFBBFRRL
|
|
||||||
FFFFBBBRRL
|
|
||||||
FBFFFBFLRL
|
|
||||||
BBFBBBBLLL
|
|
||||||
BFBBBFFRLR
|
|
||||||
BFFBBBBLLL
|
|
||||||
BFFFFFBRLL
|
|
||||||
BBFBBBBRRL
|
|
||||||
BFBFBBBLRR
|
|
||||||
FBFBBBFRRL
|
|
||||||
BFBFFFBRLL
|
|
||||||
BFFBBFBRRL
|
|
||||||
FBBBBFBLRR
|
|
||||||
BFBBFFBLRL
|
|
||||||
FFFFFFFRRL
|
|
||||||
BFBFBBBRRL
|
|
||||||
BFBBFBBRRL
|
|
||||||
FFBFBFFRRR
|
|
||||||
FFBBFFBRRR
|
|
||||||
FFFBBBBLLR
|
|
||||||
FBBFBFBLLR
|
|
||||||
BBFFFBBLLR
|
|
||||||
FFFBBBFLLL
|
|
||||||
FFFBBFFRRL
|
|
||||||
FFFBBFFRRR
|
|
||||||
FFBBFFFLRL
|
|
||||||
FBFBBFBLRR
|
|
||||||
BFFBBFBRLL
|
|
||||||
FFBBFBFLRL
|
|
||||||
FFFBBBFRLR
|
|
||||||
BBFBBFBRLL
|
|
||||||
FBFBBFFRRR
|
|
||||||
BFFBBFFLRL
|
|
||||||
BBFFBFFRRR
|
|
||||||
BBFBBBFLRR
|
|
||||||
FFFBBBFRRL
|
|
||||||
BBFFBFFRRL
|
|
||||||
FFBFBBFRRR
|
|
||||||
BBFFFBBRLR
|
|
||||||
FFFFBBFLLR
|
|
||||||
FFFFFFBLRL
|
|
||||||
BBFBFFFRRR
|
|
||||||
BFBFFFBLLR
|
|
||||||
FBFFFFBLLL
|
|
||||||
FBBBBFFRRR
|
|
||||||
BFFFBBFLRR
|
|
||||||
FFBBFBBRLR
|
|
||||||
BFFFBFFRRL
|
|
||||||
BBFBFFBLLL
|
|
||||||
FBBFBFFRLL
|
|
||||||
BFBFFBBRRL
|
|
||||||
BFFBBBFLLL
|
|
||||||
FBFBFBFRRR
|
|
||||||
BBFFBFFLLL
|
|
||||||
BFBFBBFLLR
|
|
||||||
BBFBFBFLRR
|
|
||||||
BFBBFBBLLR
|
|
||||||
FBBBFBBRLR
|
|
||||||
BFFFBBBLLL
|
|
||||||
BFBBBFBLRL
|
|
||||||
BBBFFBFRRL
|
|
||||||
FFFFFFBLLR
|
|
||||||
BFFFBBBLLR
|
|
||||||
BFBBBBFLLL
|
|
||||||
BBFBFBBLRR
|
|
||||||
FBBFBBBLLL
|
|
||||||
BBFFBFFRLR
|
|
||||||
FFFBBBBLRR
|
|
||||||
BBBFFFFRRR
|
|
||||||
BFBBBBFRRL
|
|
||||||
BBBFBFFLRR
|
|
||||||
BFBBBBFLLR
|
|
||||||
BFFBBBFLRL
|
|
||||||
BBFBBBFRLL
|
|
||||||
FFFFFBFRRR
|
|
||||||
BBBFBFFLLL
|
|
||||||
BFFFBBFLLL
|
|
||||||
BFFBFFFLLL
|
|
||||||
FFBFFBFLLL
|
|
||||||
BBFBFBFRLR
|
|
||||||
FFBBFBFRRL
|
|
||||||
BBFBFFBLRL
|
|
||||||
FBBFFBBRRL
|
|
||||||
BFFBFBFLLR
|
|
||||||
BFBFBFFLLR
|
|
||||||
BBBFFBBLRR
|
|
||||||
FBBBBBBLRL
|
|
||||||
FFBBBFBLRL
|
|
||||||
FFBFFBBRLR
|
|
||||||
BBBFFBBRRL
|
|
||||||
BFBBFBBLLL
|
|
||||||
FBFFBFBRLL
|
|
||||||
BFBBFBFLLL
|
|
||||||
BFFFBFFLLL
|
|
||||||
FBFFFBBRLR
|
|
||||||
BBBFFFBLRR
|
|
||||||
BBFFBBFRRR
|
|
||||||
BFFBBFFLRR
|
|
||||||
BFBFFFFRRL
|
|
||||||
FFFFFBFRLL
|
|
||||||
FBFBBBBRLL
|
|
||||||
FBFBFBBLLL
|
|
||||||
FFFFBFFRRR
|
|
||||||
FFBFFFFRRR
|
|
||||||
FBFFFBBLRR
|
|
||||||
FFFFBFBRLR
|
|
||||||
BFBFBBBLRL
|
|
||||||
FBBFFFFLLR
|
|
||||||
BFFBFBBLRL
|
|
||||||
FBBFBFBRRL
|
|
||||||
BBFFBFFRLL
|
|
||||||
BBFFFBFLRL
|
|
||||||
FFFBBBFRRR
|
|
||||||
BBBFFBBRRR
|
|
||||||
BFFBBBBRLL
|
|
||||||
BBFFFBBRRL
|
|
||||||
BFBFFBBLLR
|
|
||||||
FFBBBFFLLL
|
|
||||||
BFBBBBFRLL
|
|
||||||
FFBBFFFRRL
|
|
||||||
FBBBFFBLRL
|
|
||||||
BFFBFBFRLR
|
|
||||||
BBFBFFBRRL
|
|
||||||
FBBBBBBRLL
|
|
||||||
FBBBBBFRRR
|
|
||||||
BFFBBFFRLL
|
|
||||||
BBFFFFFLLL
|
|
||||||
BBBFFBBRLL
|
|
||||||
FFFBFFBLLL
|
|
||||||
FFFBFFBRRR
|
|
||||||
FFBFBBBRLR
|
|
||||||
FFFFFFBRLR
|
|
||||||
FBFFFBBRRL
|
|
||||||
BFFFFBFLLR
|
|
||||||
BFBFBBFRRR
|
|
||||||
FBBBFBBRRR
|
|
||||||
BFBFFFFLLL
|
|
||||||
BBFBBFBLRR
|
|
||||||
BFBFBBFLRR
|
|
||||||
FFFFFBBLRL
|
|
||||||
FBBFFFBRRR
|
|
||||||
FFBBFBBRRL
|
|
||||||
BFFBBBBLRR
|
|
||||||
BBFBBBFLRL
|
|
||||||
FBFFBBFLRL
|
|
||||||
BBBFFFBRRR
|
|
||||||
BBFBFBFRLL
|
|
||||||
BFBFFBFRLR
|
|
||||||
BFBFFFFLRL
|
|
||||||
BBFBBBFLLR
|
|
||||||
BFFBBBFRLR
|
|
||||||
BFBBBBBRRL
|
|
||||||
BFBFFBFRLL
|
|
||||||
BBFFFBBLLL
|
|
||||||
FBBBBFBRRL
|
|
||||||
FFBFFFFLRL
|
|
||||||
FFBBBFFLRL
|
|
||||||
FBBBFFFRLR
|
|
||||||
2201
input/2020/day6.txt
2201
input/2020/day6.txt
File diff suppressed because it is too large
Load Diff
39
src/day1.rs
39
src/day1.rs
@ -1,39 +0,0 @@
|
|||||||
use aoc_runner_derive::{aoc, aoc_generator};
|
|
||||||
|
|
||||||
#[aoc_generator(day1)]
|
|
||||||
pub fn d1_input(input: &str) -> Vec<u64> {
|
|
||||||
let mut entries: Vec<u64> = input.split('\n').map(|x| x.parse().unwrap()).collect();
|
|
||||||
entries.sort();
|
|
||||||
entries
|
|
||||||
}
|
|
||||||
|
|
||||||
#[aoc(day1, part1)]
|
|
||||||
pub fn solve_d1_p1(input: &[u64]) -> u64 {
|
|
||||||
for entry in input {
|
|
||||||
let needed = 2020 - entry;
|
|
||||||
if let Ok(idx) = input.binary_search(&needed) {
|
|
||||||
return entry * input[idx];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
panic!("not found");
|
|
||||||
}
|
|
||||||
|
|
||||||
#[aoc(day1, part2)]
|
|
||||||
pub fn solve_d1_p2(input: &[u64]) -> Option<u64> {
|
|
||||||
for i in 0..input.len() - 2 {
|
|
||||||
let entry1 = input[i];
|
|
||||||
for j in i + 1..input.len() - 1 {
|
|
||||||
let entry2 = input[j];
|
|
||||||
if entry1 + entry2 > 2020 {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
for k in j + 1..input.len() {
|
|
||||||
let entry3 = input[k];
|
|
||||||
if entry1 + entry2 + entry3 == 2020 {
|
|
||||||
return Some(entry1 * entry2 * entry3);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return None;
|
|
||||||
}
|
|
||||||
53
src/day2.rs
53
src/day2.rs
@ -1,53 +0,0 @@
|
|||||||
use aoc_runner_derive::aoc;
|
|
||||||
|
|
||||||
struct PasswdEntry<'a> {
|
|
||||||
lower_bound: usize,
|
|
||||||
upper_bound: usize,
|
|
||||||
policy_char: u8,
|
|
||||||
passwd: &'a [u8],
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a> PasswdEntry<'a> {
|
|
||||||
fn parse(mut input: &'a str) -> Option<Self> {
|
|
||||||
let lb_idx = input.find('-')?;
|
|
||||||
let lower_bound: usize = (&input[..lb_idx]).parse().ok()?;
|
|
||||||
input = &input[lb_idx + 1..];
|
|
||||||
|
|
||||||
let ub_idx = input.find(' ')?;
|
|
||||||
let upper_bound: usize = (&input[..ub_idx]).parse().ok()?;
|
|
||||||
input = &input[ub_idx + 1..];
|
|
||||||
|
|
||||||
let policy_char = input.as_bytes()[0];
|
|
||||||
let passwd = &input[3..].as_bytes();
|
|
||||||
Some(PasswdEntry {
|
|
||||||
lower_bound,
|
|
||||||
upper_bound,
|
|
||||||
policy_char,
|
|
||||||
passwd,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[aoc(day2, part1)]
|
|
||||||
pub fn solve_d2_p1(input: &str) -> usize {
|
|
||||||
fn line_is_valid(line: &str) -> bool {
|
|
||||||
let entry = PasswdEntry::parse(line).unwrap();
|
|
||||||
let count = entry
|
|
||||||
.passwd
|
|
||||||
.iter()
|
|
||||||
.filter(|&&b| b == entry.policy_char)
|
|
||||||
.count();
|
|
||||||
(count >= entry.lower_bound) && (count <= entry.upper_bound)
|
|
||||||
}
|
|
||||||
input.split('\n').filter(|x| line_is_valid(x)).count()
|
|
||||||
}
|
|
||||||
|
|
||||||
#[aoc(day2, part2)]
|
|
||||||
pub fn solve_d2_p2(input: &str) -> usize {
|
|
||||||
fn line_is_valid(line: &str) -> bool {
|
|
||||||
let entry = PasswdEntry::parse(line).unwrap();
|
|
||||||
(entry.passwd[entry.lower_bound - 1] == entry.policy_char)
|
|
||||||
^ (entry.passwd[entry.upper_bound - 1] == entry.policy_char)
|
|
||||||
}
|
|
||||||
input.split('\n').filter(|x| line_is_valid(x)).count()
|
|
||||||
}
|
|
||||||
101
src/day3.rs
101
src/day3.rs
@ -1,101 +0,0 @@
|
|||||||
use std::convert::TryFrom;
|
|
||||||
|
|
||||||
use aoc_runner_derive::{aoc, aoc_generator};
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
pub enum MapSquare {
|
|
||||||
Open,
|
|
||||||
Tree,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl TryFrom<u8> for MapSquare {
|
|
||||||
type Error = u8;
|
|
||||||
fn try_from(b: u8) -> Result<MapSquare, u8> {
|
|
||||||
Ok(match b {
|
|
||||||
b'.' => MapSquare::Open,
|
|
||||||
b'#' => MapSquare::Tree,
|
|
||||||
unknown => return Err(unknown),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[aoc_generator(day3)]
|
|
||||||
pub fn d3_input(input: &[u8]) -> Vec<Vec<MapSquare>> {
|
|
||||||
input
|
|
||||||
.split(|&b| b == b'\n')
|
|
||||||
.map(|line| {
|
|
||||||
line.iter()
|
|
||||||
.copied()
|
|
||||||
.map(|b| MapSquare::try_from(b).unwrap())
|
|
||||||
.collect()
|
|
||||||
})
|
|
||||||
.collect()
|
|
||||||
}
|
|
||||||
|
|
||||||
#[aoc(day3, part1)]
|
|
||||||
pub fn solve_d3_p1(input: &[Vec<MapSquare>]) -> usize {
|
|
||||||
input
|
|
||||||
.iter()
|
|
||||||
.skip(1)
|
|
||||||
.enumerate()
|
|
||||||
.map(|(steps_taken, grid_line)| {
|
|
||||||
let x_coord = (steps_taken + 1) * 3;
|
|
||||||
match grid_line.iter().cycle().nth(x_coord).unwrap() {
|
|
||||||
MapSquare::Open => 0,
|
|
||||||
MapSquare::Tree => 1,
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.sum()
|
|
||||||
}
|
|
||||||
|
|
||||||
#[aoc(day3, part2)]
|
|
||||||
pub fn solve_d3_p2(input: &[Vec<MapSquare>]) -> usize {
|
|
||||||
#[derive(Debug, Clone, Copy)]
|
|
||||||
struct Step {
|
|
||||||
x_step: usize,
|
|
||||||
y_step: usize,
|
|
||||||
}
|
|
||||||
|
|
||||||
let steps = [
|
|
||||||
Step {
|
|
||||||
x_step: 1,
|
|
||||||
y_step: 1,
|
|
||||||
},
|
|
||||||
Step {
|
|
||||||
x_step: 3,
|
|
||||||
y_step: 1,
|
|
||||||
},
|
|
||||||
Step {
|
|
||||||
x_step: 5,
|
|
||||||
y_step: 1,
|
|
||||||
},
|
|
||||||
Step {
|
|
||||||
x_step: 7,
|
|
||||||
y_step: 1,
|
|
||||||
},
|
|
||||||
Step {
|
|
||||||
x_step: 1,
|
|
||||||
y_step: 2,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
steps
|
|
||||||
.iter()
|
|
||||||
.copied()
|
|
||||||
.map(|Step { x_step, y_step }| -> usize {
|
|
||||||
input
|
|
||||||
.iter()
|
|
||||||
.skip(y_step)
|
|
||||||
.step_by(y_step)
|
|
||||||
.enumerate()
|
|
||||||
.map(|(num_steps_taken, grid_line)| {
|
|
||||||
let x_coord = (num_steps_taken + 1) * x_step;
|
|
||||||
match grid_line.iter().cycle().nth(x_coord).unwrap() {
|
|
||||||
MapSquare::Open => 0,
|
|
||||||
MapSquare::Tree => 1,
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.sum()
|
|
||||||
})
|
|
||||||
.product()
|
|
||||||
}
|
|
||||||
190
src/day4.rs
190
src/day4.rs
@ -1,190 +0,0 @@
|
|||||||
use std::str::FromStr;
|
|
||||||
|
|
||||||
use aoc_runner_derive::aoc;
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
struct BirthYear(u16);
|
|
||||||
impl FromStr for BirthYear {
|
|
||||||
type Err = ();
|
|
||||||
|
|
||||||
fn from_str(s: &str) -> Result<BirthYear, ()> {
|
|
||||||
let year = s.parse().map_err(|_| ())?;
|
|
||||||
if year < 1920 || year > 2002 {
|
|
||||||
return Err(());
|
|
||||||
}
|
|
||||||
Ok(BirthYear(year))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
struct IssueYear(u16);
|
|
||||||
impl FromStr for IssueYear {
|
|
||||||
type Err = ();
|
|
||||||
|
|
||||||
fn from_str(s: &str) -> Result<IssueYear, ()> {
|
|
||||||
let year = s.parse().map_err(|_| ())?;
|
|
||||||
if year < 2010 || year > 2020 {
|
|
||||||
return Err(());
|
|
||||||
}
|
|
||||||
Ok(IssueYear(year))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
struct ExpYear(u16);
|
|
||||||
impl FromStr for ExpYear {
|
|
||||||
type Err = ();
|
|
||||||
|
|
||||||
fn from_str(s: &str) -> Result<ExpYear, ()> {
|
|
||||||
let year = s.parse().map_err(|_| ())?;
|
|
||||||
if year < 2020 || year > 2030 {
|
|
||||||
return Err(());
|
|
||||||
}
|
|
||||||
Ok(ExpYear(year))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
struct HairColor(u32);
|
|
||||||
impl FromStr for HairColor {
|
|
||||||
type Err = ();
|
|
||||||
|
|
||||||
fn from_str(s: &str) -> Result<HairColor, ()> {
|
|
||||||
let hex = s.strip_prefix("#").ok_or(())?;
|
|
||||||
let hcl = u32::from_str_radix(hex, 16).map_err(|_| ())?;
|
|
||||||
if hcl > 0xffffff {
|
|
||||||
return Err(());
|
|
||||||
}
|
|
||||||
Ok(HairColor(hcl))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
enum Height {
|
|
||||||
Inches(u8),
|
|
||||||
Cm(u8),
|
|
||||||
}
|
|
||||||
impl FromStr for Height {
|
|
||||||
type Err = ();
|
|
||||||
|
|
||||||
fn from_str(s: &str) -> Result<Height, ()> {
|
|
||||||
if let Some(cm) = s.strip_suffix("cm") {
|
|
||||||
let cm: u8 = cm.parse().map_err(|_| ())?;
|
|
||||||
if cm < 150 || cm > 193 {
|
|
||||||
return Err(());
|
|
||||||
}
|
|
||||||
Ok(Height::Cm(cm))
|
|
||||||
} else if let Some(inches) = s.strip_suffix("in") {
|
|
||||||
let inches: u8 = inches.parse().map_err(|_| ())?;
|
|
||||||
if inches < 59 || inches > 76 {
|
|
||||||
return Err(());
|
|
||||||
}
|
|
||||||
Ok(Height::Inches(inches))
|
|
||||||
} else {
|
|
||||||
Err(())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
enum EyeColor {
|
|
||||||
Amber,
|
|
||||||
Blue,
|
|
||||||
Brown,
|
|
||||||
Gray,
|
|
||||||
Green,
|
|
||||||
Hazel,
|
|
||||||
Other,
|
|
||||||
}
|
|
||||||
impl FromStr for EyeColor {
|
|
||||||
type Err = ();
|
|
||||||
|
|
||||||
fn from_str(s: &str) -> Result<EyeColor, ()> {
|
|
||||||
Ok(match s {
|
|
||||||
"amb" => EyeColor::Amber,
|
|
||||||
"blu" => EyeColor::Blue,
|
|
||||||
"brn" => EyeColor::Brown,
|
|
||||||
"gry" => EyeColor::Gray,
|
|
||||||
"grn" => EyeColor::Green,
|
|
||||||
"hzl" => EyeColor::Hazel,
|
|
||||||
"oth" => EyeColor::Other,
|
|
||||||
_ => return Err(()),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
struct PassportId(u32);
|
|
||||||
impl FromStr for PassportId {
|
|
||||||
type Err = ();
|
|
||||||
|
|
||||||
fn from_str(s: &str) -> Result<PassportId, ()> {
|
|
||||||
if s.len() != 9 {
|
|
||||||
return Err(());
|
|
||||||
}
|
|
||||||
Ok(PassportId(s.parse().map_err(|_| ())?))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
pub struct Passport<'a> {
|
|
||||||
byr: BirthYear,
|
|
||||||
iyr: IssueYear,
|
|
||||||
eyr: ExpYear,
|
|
||||||
hgt: Height,
|
|
||||||
hcl: HairColor,
|
|
||||||
ecl: EyeColor,
|
|
||||||
pid: PassportId,
|
|
||||||
cid: Option<&'a str>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a> Passport<'a> {
|
|
||||||
fn parse(input: &'a str) -> Option<Self> {
|
|
||||||
fn parse_kv(input: &str) -> Option<(&str, &str)> {
|
|
||||||
let mut iter = input.split(':');
|
|
||||||
let k = iter.next()?;
|
|
||||||
let v = iter.next()?;
|
|
||||||
if iter.next().is_some() {
|
|
||||||
return None;
|
|
||||||
}
|
|
||||||
Some((k, v))
|
|
||||||
}
|
|
||||||
|
|
||||||
let mut byr = None;
|
|
||||||
let mut iyr = None;
|
|
||||||
let mut eyr = None;
|
|
||||||
let mut hgt = None;
|
|
||||||
let mut hcl = None;
|
|
||||||
let mut ecl = None;
|
|
||||||
let mut pid = None;
|
|
||||||
let mut cid = None;
|
|
||||||
for field in input.split_ascii_whitespace() {
|
|
||||||
match parse_kv(field) {
|
|
||||||
Some(("byr", value)) => byr = Some(value.parse().ok()?),
|
|
||||||
Some(("iyr", value)) => iyr = Some(value.parse().ok()?),
|
|
||||||
Some(("eyr", value)) => eyr = Some(value.parse().ok()?),
|
|
||||||
Some(("hgt", value)) => hgt = Some(value.parse().ok()?),
|
|
||||||
Some(("hcl", value)) => hcl = Some(value.parse().ok()?),
|
|
||||||
Some(("ecl", value)) => ecl = Some(value.parse().ok()?),
|
|
||||||
Some(("pid", value)) => pid = Some(value.parse().ok()?),
|
|
||||||
Some(("cid", value)) => cid = Some(value),
|
|
||||||
_ => return None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Some(Passport {
|
|
||||||
byr: byr?,
|
|
||||||
iyr: iyr?,
|
|
||||||
eyr: eyr?,
|
|
||||||
hgt: hgt?,
|
|
||||||
hcl: hcl?,
|
|
||||||
ecl: ecl?,
|
|
||||||
pid: pid?,
|
|
||||||
cid,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[aoc(day4, part2)]
|
|
||||||
pub fn solve_d4_p2(input: &str) -> usize {
|
|
||||||
input.split("\n\n").filter_map(Passport::parse).count()
|
|
||||||
}
|
|
||||||
86
src/day5.rs
86
src/day5.rs
@ -1,86 +0,0 @@
|
|||||||
use aoc_runner_derive::aoc;
|
|
||||||
|
|
||||||
use std::fmt;
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy, Eq, PartialEq, Ord, PartialOrd)]
|
|
||||||
pub struct SeatId(u16);
|
|
||||||
impl fmt::Display for SeatId {
|
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
|
||||||
<Self as fmt::Debug>::fmt(self, f)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl SeatId {
|
|
||||||
fn parse(input: &[u8]) -> Option<SeatId> {
|
|
||||||
if input.len() != 10 {
|
|
||||||
return None;
|
|
||||||
}
|
|
||||||
let mut seatid = 0u16;
|
|
||||||
|
|
||||||
for b in &input[..7] {
|
|
||||||
let value = match b {
|
|
||||||
b'F' => 0,
|
|
||||||
b'B' => 1,
|
|
||||||
_ => return None,
|
|
||||||
};
|
|
||||||
seatid = (seatid << 1) | value;
|
|
||||||
}
|
|
||||||
|
|
||||||
for b in &input[7..10] {
|
|
||||||
let value = match b {
|
|
||||||
b'L' => 0,
|
|
||||||
b'R' => 1,
|
|
||||||
_ => return None,
|
|
||||||
};
|
|
||||||
seatid = (seatid << 1) | value;
|
|
||||||
}
|
|
||||||
Some(SeatId(seatid))
|
|
||||||
}
|
|
||||||
|
|
||||||
fn row(&self) -> u8 {
|
|
||||||
(self.0 >> 3) as u8
|
|
||||||
}
|
|
||||||
|
|
||||||
fn column(&self) -> u8 {
|
|
||||||
(self.0 & 0b111) as u8
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[aoc(day5, part1)]
|
|
||||||
pub fn solve_d5_p1(input: &[u8]) -> SeatId {
|
|
||||||
input
|
|
||||||
.split(|&b| b == b'\n')
|
|
||||||
.map(|i| SeatId::parse(i).unwrap())
|
|
||||||
.max()
|
|
||||||
.unwrap()
|
|
||||||
}
|
|
||||||
|
|
||||||
#[aoc(day5, part2)]
|
|
||||||
pub fn solve_d5_p2(input: &[u8]) -> SeatId {
|
|
||||||
#[derive(Debug)]
|
|
||||||
struct MinMaxSum {
|
|
||||||
min: u16,
|
|
||||||
max: u16,
|
|
||||||
sum: u32,
|
|
||||||
}
|
|
||||||
let MinMaxSum { min, max, sum } = input
|
|
||||||
.split(|&b| b == b'\n')
|
|
||||||
.map(|i| SeatId::parse(i).unwrap())
|
|
||||||
.fold(
|
|
||||||
MinMaxSum {
|
|
||||||
min: u16::MAX,
|
|
||||||
max: 0,
|
|
||||||
sum: 0,
|
|
||||||
},
|
|
||||||
|MinMaxSum { min, max, sum }, seatid| MinMaxSum {
|
|
||||||
min: std::cmp::min(min, seatid.0),
|
|
||||||
max: std::cmp::max(max, seatid.0),
|
|
||||||
sum: sum + seatid.0 as u32,
|
|
||||||
},
|
|
||||||
);
|
|
||||||
let max = max as u32;
|
|
||||||
let min = min as u32;
|
|
||||||
let num_seats = max - min + 1;
|
|
||||||
let expected_sum = (max + min) * num_seats / 2;
|
|
||||||
SeatId((expected_sum - sum) as u16)
|
|
||||||
}
|
|
||||||
76
src/day6.rs
76
src/day6.rs
@ -1,76 +0,0 @@
|
|||||||
use std::{iter::FromIterator, ops::BitAnd};
|
|
||||||
|
|
||||||
use aoc_runner_derive::aoc;
|
|
||||||
|
|
||||||
/// A set that can only contain b'a'..b'z';
|
|
||||||
struct AlphabetSet(u32);
|
|
||||||
impl AlphabetSet {
|
|
||||||
pub fn new() -> AlphabetSet {
|
|
||||||
AlphabetSet(0)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn insert(&mut self, b: u8) {
|
|
||||||
self.0 |= 1 << Self::char_to_bit_index(b);
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn len(&self) -> usize {
|
|
||||||
self.0.count_ones() as usize
|
|
||||||
}
|
|
||||||
|
|
||||||
fn char_to_bit_index(b: u8) -> usize {
|
|
||||||
debug_assert!(b >= b'a' && b <= b'z');
|
|
||||||
(b as usize - 97) & 0x1f
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Do a set intersection with another set.
|
|
||||||
impl std::ops::BitAndAssign for AlphabetSet {
|
|
||||||
fn bitand_assign(&mut self, rhs: AlphabetSet) {
|
|
||||||
self.0 &= rhs.0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl FromIterator<u8> for AlphabetSet {
|
|
||||||
fn from_iter<I>(iter: I) -> AlphabetSet
|
|
||||||
where
|
|
||||||
I: IntoIterator<Item = u8>,
|
|
||||||
{
|
|
||||||
let mut set = AlphabetSet::new();
|
|
||||||
for entry in iter {
|
|
||||||
set.insert(entry);
|
|
||||||
}
|
|
||||||
set
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[aoc(day6, part1)]
|
|
||||||
pub fn solve_d6_p1(input: &str) -> usize {
|
|
||||||
input
|
|
||||||
.split("\n\n")
|
|
||||||
.map(|record| {
|
|
||||||
record
|
|
||||||
.split('\n')
|
|
||||||
.flat_map(|line| line.as_bytes())
|
|
||||||
.copied()
|
|
||||||
.collect::<AlphabetSet>()
|
|
||||||
.len()
|
|
||||||
})
|
|
||||||
.sum()
|
|
||||||
}
|
|
||||||
|
|
||||||
#[aoc(day6, part2)]
|
|
||||||
pub fn solve_d6_p2(input: &str) -> usize {
|
|
||||||
input
|
|
||||||
.split("\n\n")
|
|
||||||
.map(|record| {
|
|
||||||
let mut line_iter = record
|
|
||||||
.split('\n')
|
|
||||||
.map(|line| line.as_bytes().iter().copied().collect::<AlphabetSet>());
|
|
||||||
let mut group_set = line_iter.next().unwrap();
|
|
||||||
for set in line_iter {
|
|
||||||
group_set &= set;
|
|
||||||
}
|
|
||||||
group_set.len()
|
|
||||||
})
|
|
||||||
.sum()
|
|
||||||
}
|
|
||||||
170
src/lib.rs
170
src/lib.rs
@ -1,8 +1,164 @@
|
|||||||
pub mod day1;
|
use std::convert::TryFrom;
|
||||||
pub mod day2;
|
|
||||||
pub mod day3;
|
|
||||||
pub mod day4;
|
|
||||||
pub mod day5;
|
|
||||||
pub mod day6;
|
|
||||||
|
|
||||||
aoc_runner_derive::aoc_lib! { year = 2020 }
|
use aoc_runner_derive::{aoc, aoc_generator, aoc_lib};
|
||||||
|
|
||||||
|
#[aoc_generator(day1)]
|
||||||
|
pub fn d1_input(input: &str) -> Vec<u64> {
|
||||||
|
let mut entries: Vec<u64> = input.split('\n').map(|x| x.parse().unwrap()).collect();
|
||||||
|
entries.sort();
|
||||||
|
entries
|
||||||
|
}
|
||||||
|
|
||||||
|
#[aoc(day1, part1)]
|
||||||
|
pub fn solve_d1_p1(input: &[u64]) -> u64 {
|
||||||
|
for entry in input {
|
||||||
|
let needed = 2020 - entry;
|
||||||
|
if let Ok(idx) = input.binary_search(&needed) {
|
||||||
|
return entry * input[idx];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
panic!("not found");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[aoc(day1, part2)]
|
||||||
|
pub fn solve_d1_p2(input: &[u64]) -> Option<u64> {
|
||||||
|
for i in 0..input.len() - 2 {
|
||||||
|
let entry1 = input[i];
|
||||||
|
for j in i + 1..input.len() - 1 {
|
||||||
|
let entry2 = input[j];
|
||||||
|
if entry1 + entry2 > 2020 {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
for k in j + 1..input.len() {
|
||||||
|
let entry3 = input[k];
|
||||||
|
if entry1 + entry2 + entry3 == 2020 {
|
||||||
|
return Some(entry1 * entry2 * entry3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct PasswdEntry<'a> {
|
||||||
|
lower_bound: usize,
|
||||||
|
upper_bound: usize,
|
||||||
|
policy_char: u8,
|
||||||
|
passwd: &'a [u8],
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> PasswdEntry<'a> {
|
||||||
|
fn parse(mut input: &'a str) -> Option<Self> {
|
||||||
|
let lb_idx = input.find('-')?;
|
||||||
|
let lower_bound: usize = (&input[..lb_idx]).parse().ok()?;
|
||||||
|
input = &input[lb_idx + 1..];
|
||||||
|
|
||||||
|
let ub_idx = input.find(' ')?;
|
||||||
|
let upper_bound: usize = (&input[..ub_idx]).parse().ok()?;
|
||||||
|
input = &input[ub_idx + 1..];
|
||||||
|
|
||||||
|
let policy_char = input.as_bytes()[0];
|
||||||
|
let passwd = &input[3..].as_bytes();
|
||||||
|
Some(PasswdEntry { lower_bound, upper_bound, policy_char, passwd })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[aoc(day2, part1)]
|
||||||
|
pub fn solve_d2_p1(input: &str) -> usize {
|
||||||
|
fn line_is_valid(line: &str) -> bool {
|
||||||
|
let entry = PasswdEntry::parse(line).unwrap();
|
||||||
|
let count = entry.passwd.iter().filter(|&&b| b == entry.policy_char).count();
|
||||||
|
(count >= entry.lower_bound) && (count <= entry.upper_bound)
|
||||||
|
}
|
||||||
|
input.split('\n').filter(|x| line_is_valid(x)).count()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[aoc(day2, part2)]
|
||||||
|
pub fn solve_d2_p2(input: &str) -> usize {
|
||||||
|
fn line_is_valid(line: &str) -> bool {
|
||||||
|
let entry = PasswdEntry::parse(line).unwrap();
|
||||||
|
(entry.passwd[entry.lower_bound - 1] == entry.policy_char)
|
||||||
|
^ (entry.passwd[entry.upper_bound - 1] == entry.policy_char)
|
||||||
|
}
|
||||||
|
input.split('\n').filter(|x| line_is_valid(x)).count()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub enum MapSquare {
|
||||||
|
Open,
|
||||||
|
Tree,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TryFrom<u8> for MapSquare {
|
||||||
|
type Error = u8;
|
||||||
|
fn try_from(b: u8) -> Result<MapSquare, u8> {
|
||||||
|
Ok(match b {
|
||||||
|
b'.' => MapSquare::Open,
|
||||||
|
b'#' => MapSquare::Tree,
|
||||||
|
unknown => return Err(unknown),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[aoc_generator(day3)]
|
||||||
|
pub fn d3_input(input: &[u8]) -> Vec<Vec<MapSquare>> {
|
||||||
|
input
|
||||||
|
.split(|&b| b == b'\n')
|
||||||
|
.map(|line| line.iter().copied().map(|b| MapSquare::try_from(b).unwrap()).collect())
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[aoc(day3, part1)]
|
||||||
|
pub fn solve_d3_p1(input: &[Vec<MapSquare>]) -> usize {
|
||||||
|
input
|
||||||
|
.iter()
|
||||||
|
.skip(1)
|
||||||
|
.enumerate()
|
||||||
|
.map(|(steps_taken, grid_line)| {
|
||||||
|
let x_coord = (steps_taken + 1) * 3;
|
||||||
|
match grid_line.iter().cycle().nth(x_coord).unwrap() {
|
||||||
|
MapSquare::Open => 0,
|
||||||
|
MapSquare::Tree => 1,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.sum()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[aoc(day3, part2)]
|
||||||
|
pub fn solve_d3_p2(input: &[Vec<MapSquare>]) -> usize {
|
||||||
|
#[derive(Debug, Clone, Copy)]
|
||||||
|
struct Step {
|
||||||
|
x_step: usize,
|
||||||
|
y_step: usize,
|
||||||
|
}
|
||||||
|
|
||||||
|
let steps = [
|
||||||
|
Step { x_step: 1, y_step: 1 },
|
||||||
|
Step { x_step: 3, y_step: 1 },
|
||||||
|
Step { x_step: 5, y_step: 1 },
|
||||||
|
Step { x_step: 7, y_step: 1 },
|
||||||
|
Step { x_step: 1, y_step: 2 },
|
||||||
|
];
|
||||||
|
|
||||||
|
steps
|
||||||
|
.iter()
|
||||||
|
.copied()
|
||||||
|
.map(|Step { x_step, y_step }| -> usize {
|
||||||
|
input
|
||||||
|
.iter()
|
||||||
|
.skip(y_step)
|
||||||
|
.step_by(y_step)
|
||||||
|
.enumerate()
|
||||||
|
.map(|(num_steps_taken, grid_line)| {
|
||||||
|
let x_coord = (num_steps_taken + 1) * x_step;
|
||||||
|
match grid_line.iter().cycle().nth(x_coord).unwrap() {
|
||||||
|
MapSquare::Open => 0,
|
||||||
|
MapSquare::Tree => 1,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.sum()
|
||||||
|
})
|
||||||
|
.product()
|
||||||
|
}
|
||||||
|
|
||||||
|
aoc_lib! { year = 2020 }
|
||||||
|
|||||||
@ -1,3 +0,0 @@
|
|||||||
use aoc_runner_derive::aoc_main;
|
|
||||||
|
|
||||||
aoc_main! { lib = aoc }
|
|
||||||
Loading…
x
Reference in New Issue
Block a user