Advent of Code 2021 - Day 1
Utils
defmodule Utils do
def read_textarea(name) do
Stream.iterate("", fn _ -> IO.gets(name) end)
|> Stream.take_while(&(&1 != :eof))
|> Enum.join("\r\n")
end
end
{:module, Utils, <<70, 79, 82, 49, 0, 0, 7, ...>>, {:read_textarea, 1}}
Part 1
defmodule Day1 do
def solve(input) do
input
# to list of strings
|> String.split(~r{\s}, trim: true)
# to list of ints
|> Enum.map(&String.to_integer/1)
# [1, 2, 3] => [[1, 2], [2, 3]]
|> Enum.chunk_every(2, 1, :discard)
|> Enum.filter(fn [first, second] -> second > first end)
|> Enum.count()
end
end
IO.inspect(Day1.solve(Utils.read_textarea("example_input")))
IO.inspect(Day1.solve(Utils.read_textarea("my_input")))
7
1301
1301
Part 2
defmodule Day1.Part2 do
def solve(input) do
input
# to list of strings
|> String.split(~r{\s}, trim: true)
# to list of ints
|> Enum.map(&String.to_integer/1)
# [1, 2, 3, 4, 5] => [[1, 2, 3], [2, 3, 4], [3, 4, 5]]
|> Enum.chunk_every(3, 1, :discard)
# [[1, 2, 3], [2, 3, 4], [3, 4, 5]] => [6, 9, 12]
|> Enum.map(&Enum.sum/1)
# [1, 2, 3] => [[1, 2], [2, 3]]
|> Enum.chunk_every(2, 1, :discard)
|> Enum.filter(fn [first, second] -> second > first end)
|> Enum.count()
end
end
IO.inspect(Day1.Part2.solve(Utils.read_textarea("example_input")))
IO.inspect(Day1.Part2.solve(Utils.read_textarea("my_input")))
5
1346
1346