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

Day06

day06.livemd

Day06

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_a(file) do
    file
    |> String.split("\n\n", trim: true)
    |> Enum.map(&String.replace(&1, "\n", ""))
  end

  def tabulate_a(group) do
    for char <- ?a..?z,
        String.contains?(group, <>) do
      <>
    end
  end

  def parse_b(file) do
    file
    |> String.split("\n\n", trim: true)
    |> Enum.map(&amp;String.split(&amp;1, "\n", trim: true))
  end

  def tabulate_b(group) do
    size = group |> Enum.count()

    group
    |> Enum.map(&amp;String.graphemes/1)
    |> Enum.map(&amp;Enum.frequencies/1)
    |> Enum.reduce(fn map, acc ->
      Map.merge(acc, map, fn _k, v1, v2 -> v1 + v2 end)
    end)
    |> Map.filter(fn {_k, v} -> v == size end)
    |> Enum.count()
  end
end

part a

input
|> Shared.parse_a()
|> Enum.map(&amp;Shared.tabulate_a/1)
|> Enum.concat()
|> Enum.count()

part b

input
|> Shared.parse_b()
|> Enum.map(&amp;Shared.tabulate_b/1)
|> Enum.sum()