-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathday2.ex
More file actions
38 lines (31 loc) · 863 Bytes
/
Copy pathday2.ex
File metadata and controls
38 lines (31 loc) · 863 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
defmodule Day2 do
# part 1
def position_depth(commands) do
commands |> Enum.reduce({0, 0}, &navigate/2) |> Tuple.product()
end
defp navigate([:forward, steps], {pos, depth}) do
{pos + steps, depth}
end
defp navigate([:down, steps], {pos, depth}) do
{pos, depth + steps}
end
defp navigate([:up, steps], {pos, depth}) do
{pos, depth - steps}
end
# part 2
def plan_course(commands) do
commands
|> Enum.reduce({0, 0, 0}, &navigate_with_aim/2)
|> Tuple.delete_at(2)
|> Tuple.product()
end
defp navigate_with_aim([:forward, steps], {pos, depth, aim}) do
{pos + steps, depth + aim * steps, aim}
end
defp navigate_with_aim([:down, steps], {pos, depth, aim}) do
{pos, depth, aim + steps}
end
defp navigate_with_aim([:up, steps], {pos, depth, aim}) do
{pos, depth, aim - steps}
end
end