This commit is contained in:
Shadowfacts 2020-12-05 10:12:14 -05:00
parent 8acd351f84
commit ac51a553e6
Signed by: shadowfacts
GPG Key ID: 94A5AB95422746E5
4 changed files with 905 additions and 1 deletions

View File

@ -120,7 +120,7 @@ defmodule Day4 do
iex> Day4.validate_pid("000000001")
true
iex> Day4.validate_pid("0123456789")
true
false
"""
def validate_pid(v) do
Regex.match?(~r/^\d{9}$/, v)

84
lib/day5/day5.ex Normal file
View File

@ -0,0 +1,84 @@
defmodule Day5 do
def part1 do
input_seat_ids()
|> Enum.max()
end
def part2 do
all_ids = input_seat_ids()
has_id = fn id ->
Enum.any?(all_ids, &(&1 == id))
end
max_id = seat_id({127, 7})
0..max_id
|> Enum.find(fn id ->
!has_id.(id) && has_id.(id - 1) && has_id.(id + 1)
end)
end
def input_seat_ids do
File.read!("lib/day5/input.txt")
|> String.trim()
|> String.split("\n")
|> Enum.map(fn pass ->
pass
|> find_seat()
|> seat_id()
end)
end
@doc """
iex> Day5.find_seat("FBFBBFFRLR")
{44, 5}
"""
def find_seat(str) do
{row, rest} = find_row(str, 0, 127)
col = find_col(rest, 0, 7)
{row, col}
end
def find_row(str, min, max) when min == max do
{min, str}
end
def find_row("F" <> rest, min, max) do
bound = floor((min + max) / 2)
find_row(rest, min, bound)
end
def find_row("B" <> rest, min, max) do
bound = ceil((min + max) / 2)
find_row(rest, bound, max)
end
def find_col(_, min, max) when min == max do
min
end
def find_col("L" <> rest, min, max) do
bound = floor((min + max) / 2)
find_col(rest, min, bound)
end
def find_col("R" <> rest, min, max) do
bound = ceil((min + max) / 2)
find_col(rest, bound, max)
end
@doc """
iex> Day5.seat_id({44, 5})
357
iex> Day5.seat_id({70, 7})
567
iex> Day5.seat_id({14, 7})
119
iex> Day5.seat_id({102, 4})
820
"""
def seat_id({row, col}) do
row * 8 + col
end
end

816
lib/day5/input.txt Normal file
View File

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

4
test/day5_test.exs Normal file
View File

@ -0,0 +1,4 @@
defmodule Day5Test do
use ExUnit.Case
doctest Day5
end