27 lines
849 B
Elixir
27 lines
849 B
Elixir
defmodule AOC.Day2 do
|
|
def parse_input do
|
|
AOC.Util.input_lines(2, 1)
|
|
|> Enum.map(fn l ->
|
|
[dir, amount] = String.split(l, " ")
|
|
{String.to_atom(dir), String.to_integer(amount)}
|
|
end)
|
|
end
|
|
|
|
def part1 do
|
|
parse_input()
|
|
|> Enum.reduce({0, 0}, fn
|
|
{:forward, amount}, {distance, depth} -> {distance + amount, depth}
|
|
{:down, amount}, {distance, depth} -> {distance, depth + amount}
|
|
{:up, amount}, {distance, depth} -> {distance, depth - amount}
|
|
end)
|
|
end
|
|
|
|
def part2 do
|
|
parse_input()
|
|
|> Enum.reduce({0, 0, 0}, fn
|
|
{:down, amount}, {distance, depth, aim} -> {distance, depth, aim + amount}
|
|
{:up, amount}, {distance, depth, aim} -> {distance, depth, aim - amount}
|
|
{:forward, amount}, {distance, depth, aim} -> {distance + amount, depth + aim * amount, aim}
|
|
end)
|
|
end
|
|
end
|