Watch
1
0
Fork
You've already forked advent-of-code
0

Day 5 Part 1

This commit is contained in:
Jeremy Kaplan 2020-12-04 21:31:23 -08:00
commit 0ba3fd1159
2 changed files with 862 additions and 0 deletions

46
2020/day5/day5.ex Normal file
View file

@ -0,0 +1,46 @@
defmodule Day5 do
defp read_input do
Path.expand('input', Path.dirname(__ENV__.file))
|> File.read!()
end
defp half_range({lo, hi}, half) do
halfway = lo + div(hi + 1 - lo, 2)
lower = {lo, halfway - 1}
upper = {halfway, hi}
case half do
:lower -> lower
:upper -> upper
end
end
defp parse_seat(line) do
%{row: {r, r}, col: {c, c}} =
String.codepoints(line)
|> Enum.reduce(%{row: {0, 127}, col: {0, 7}}, fn char, %{row: row, col: col} ->
case char do
"F" -> %{row: half_range(row, :lower), col: col}
"B" -> %{row: half_range(row, :upper), col: col}
"L" -> %{row: row, col: half_range(col, :lower)}
"R" -> %{row: row, col: half_range(col, :upper)}
end
end)
{r, c}
end
defp seat_id({r, c}) do
r * 8 + c
end
def part1 do
read_input()
|> String.split()
|> Enum.map(&parse_seat/1)
|> Enum.map(&seat_id/1)
|> Enum.max()
end
end
Day5.part1() |> IO.inspect()