Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us
Notesclub

Day05

day05.livemd

Day05

Setup

Mix.install([
  {:kino, "~> 0.5.0"}
])
sample_text = Kino.Input.textarea("sample")
input_text = Kino.Input.textarea("input")
sample = Kino.Input.read(sample_text)
input = Kino.Input.read(input_text)
defmodule Shared do
  def parse(list) do
    list
    |> String.split("\n", trim: true)
    |> Enum.map(&String.split_at(&1, 7))
  end

  def translate({fb, lr}), do: {to_binary(fb), to_binary(lr)}

  def score({row, col}), do: row * 8 + col

  def to_binary(string), do: to_binary(string, 0)

  defp to_binary("", res), do: res
  defp to_binary("B" <> string, res), do: to_binary(string, res * 2 + 1)
  defp to_binary("F" <> string, res), do: to_binary(string, res * 2 + 0)
  defp to_binary("R" <> string, res), do: to_binary(string, res * 2 + 1)
  defp to_binary("L" <> string, res), do: to_binary(string, res * 2 + 0)
end

part a

input
|> Shared.parse()
|> Enum.map(&amp;Shared.translate/1)
|> Enum.map(&amp;Shared.score/1)
|> Enum.max()

part b

seats =
  input
  |> Shared.parse()
  |> Enum.map(&amp;Shared.translate/1)
  |> Enum.map(&amp;Shared.score/1)

for i <- 0..Enum.max(seats),
    u = i - 1,
    o = i + 1,
    i not in seats,
    u in seats and o in seats do
  i
end