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

day6

2020-Elixir/day6.livemd

day6

Mix.install([:kino])

Section

input = Kino.Input.textarea("Enter input: ")
input = Kino.Input.read(input)

part1 =
  input
  |> String.split("\n\n")
  |> Enum.map(&String.replace(&1, "\n", ""))
  |> Enum.map(&String.graphemes(&1))
  |> Enum.map(&Enum.uniq(&1))
  |> List.flatten()
  |> Enum.count()
  |> IO.puts()

data =
  input
  |> String.split("\n\n")
  |> Enum.map(&String.split(&1))

map =
  for list <- data do
    for str <- list do
      String.graphemes(str) |> MapSet.new()
    end
  end

part2 =
  Enum.map(map, fn x -> Enum.reduce(x, &amp;MapSet.intersection(&amp;1, &amp;2)) end)
  |> Enum.map(&amp;MapSet.size(&amp;1))
  |> Enum.sum()
  |> IO.puts()