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

Day 3

03/03.livemd

Day 3

Set up

input =
  """
  00100
  11110
  10110
  10111
  10101
  01111
  00111
  11100
  10000
  11001
  00010
  01010
  """
  |> String.split("\n", trim: true)
  |> Enum.map(fn str -> Enum.map(String.graphemes(str), &String.to_integer/1) end)

Part 1

max_chars =
  input
  |> Enum.zip()
  |> Enum.map(&Tuple.to_list/1)
  |> Enum.map(&Enum.sum/1)
  |> Enum.map(&(&1 > length(input) / 2))
  |> Enum.map(&if &1, do: 1, else: 0)
gamma =
  max_chars
  |> Enum.map(&Integer.to_string/1)
  |> Enum.join()
  |> Integer.parse(2)
  |> elem(0)
epsilon =
  max_chars
  |> Enum.map(&if &1 == 0, do: 1, else: 0)
  |> Enum.map(&Integer.to_string/1)
  |> Enum.join()
  |> Integer.parse(2)
  |> elem(0)
part1_solution = gamma * epsilon

Part 2