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