Powered by AppSignal & Oban Pro

🎄 Year 2020 🔔 Day 05

elixir/notebooks/2020/day05.livemd

🎄 Year 2020 🔔 Day 05

Parse input

filename = "#{__DIR__}/../../../inputs/2020/day05.txt"

parsed_input_stream =
  File.stream!(filename)
  |> Stream.map(&String.trim/1)
  |> Stream.map(&String.replace(&1, ["B", "R"], "1"))
  |> Stream.map(&String.replace(&1, ["F", "L"], "0"))
  |> Stream.map(&String.split_at(&1, 7))
  |> Stream.map(fn {row, column} ->
    {String.to_integer(row, 2), String.to_integer(column, 2)}
  end)

Shared code

Part One

parsed_input_stream
|> Enum.map(fn {row, column} -> row * 8 + column end)
|> Enum.max()

Part two

parsed_input_stream
|> Enum.map(fn {row, column} -> row * 8 + column end)
|> Enum.sort()
|> Enum.reduce_while(0, fn e, prev ->
  if e - 2 == prev do
    {:halt, prev + 1}
  else
    {:cont, e}
  end
end)