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(&Shared.translate/1)
|> Enum.map(&Shared.score/1)
|> Enum.max()
part b
seats =
input
|> Shared.parse()
|> Enum.map(&Shared.translate/1)
|> Enum.map(&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