Day 2
Part 1
defmodule Day2 do
def accept_cube(lists) do
Enum.map(lists, fn list ->
case list do
[n, "red"] -> {String.to_integer(n), 0, 0}
[n, "green"] -> {0, String.to_integer(n), 0}
[n, "blue"] -> {0, 0, String.to_integer(n)}
end
end)
end
end
{:module, Day2, <<70, 79, 82, 49, 0, 0, 8, ...>>, {:accept_cube, 1}}
lines = String.split(File.read!("../input/day2.txt"), "\n", trim: true)
lines
|> Enum.map(&String.slice(&1, 8..-1))
|> Enum.map(&String.replace(&1, [",", ";", ":"], " "))
|> Enum.map(&String.split(&1, " ", trim: true))
|> Enum.map(&Enum.chunk_every(&1, 2))
|> Enum.map(&Day2.accept_cube/1)
|> Enum.with_index()
|> Enum.filter(fn {tuplas, _} ->
!Enum.any?(tuplas, fn {r, g, b} -> r > 12 || g > 13 || b > 14 end)
end)
|> Enum.map(fn {_, n} -> n + 1 end)
|> Enum.sum()
2720
Part 2
lines =
String.split(File.read!("../input/day2.txt"), "\n", trim: true)
|> Enum.map(&String.slice(&1, 8..-1))
|> Enum.map(&String.replace(&1, [",", ";", ":"], " "))
|> Enum.map(&String.split(&1, " ", trim: true))
|> Enum.map(&Enum.chunk_every(&1, 2))
|> Enum.map(&Day2.accept_cube/1)
|> Enum.with_index()
|> Enum.map(fn {cubes, _} ->
{r, _, _} = Enum.max_by(cubes, fn {r, _, _} -> r end)
{_, g, _} = Enum.max_by(cubes, fn {_, g, _} -> g end)
{_, _, b} = Enum.max_by(cubes, fn {_, _, b} -> b end)
r * g * b
end)
|> Enum.sum()
71535