Files
adventofcode/2021/day2/day2.erl
2023-11-16 10:48:53 +00:00

1051 lines
12 KiB
Erlang

-module(day2).
-export ([solve/0, solve/1, solve/2]).
solve() ->
solve(['1']),
solve(['2']),
init:stop().
solve(A) ->
solve(A, get_data()).
solve(['1'], D) ->
io:format("The solution to ~p puzzle1 is: ~p~n", [?MODULE, solve(1, D)]);
solve(1, D) ->
solution1(D);
solve(['2'], D) ->
io:format("The solution to ~p puzzle2 is: ~p~n", [?MODULE, solve(2, D)]);
solve(2, D) ->
solution2(D).
solution1(D) ->
{X, Y} =
lists:foldl(fun({Dir, Dis}, {X, Y}) ->
case Dir of
'up' -> {X, Y - Dis};
'down' -> {X, Y + Dis};
'forward' -> {X + Dis, Y}
end
end,
{0, 0},
D),
X * Y.
solution2(D) ->
{X, Y, _} =
lists:foldl(fun({Dir, Dis}, {X, Y, Aim}) ->
case Dir of
'up' -> {X, Y, Aim - Dis};
'down' -> {X, Y, Aim + Dis};
'forward' -> {X + Dis, Y + (Dis * Aim), Aim}
end
end,
{0,0,0},
D),
X * Y.
get_data() ->
[
{forward, 3},
{down, 4},
{forward, 3},
{up, 4},
{down, 4},
{down, 6},
{down, 3},
{down, 1},
{up, 7},
{down, 7},
{forward, 4},
{forward, 7},
{forward, 3},
{down, 2},
{forward, 5},
{down, 7},
{forward, 5},
{up, 9},
{down, 6},
{forward, 8},
{forward, 8},
{down, 8},
{forward, 7},
{down, 9},
{down, 4},
{down, 6},
{forward, 1},
{down, 2},
{down, 7},
{up, 4},
{forward, 8},
{down, 5},
{down, 7},
{down, 1},
{forward, 5},
{down, 1},
{up, 1},
{forward, 5},
{forward, 1},
{down, 1},
{forward, 3},
{up, 4},
{up, 4},
{up, 8},
{up, 1},
{forward, 7},
{down, 3},
{forward, 3},
{forward, 3},
{down, 3},
{down, 6},
{down, 7},
{forward, 4},
{down, 2},
{up, 3},
{forward, 5},
{forward, 1},
{down, 3},
{up, 3},
{up, 4},
{forward, 2},
{forward, 6},
{up, 1},
{down, 9},
{up, 3},
{forward, 5},
{forward, 2},
{up, 9},
{up, 2},
{down, 5},
{down, 5},
{forward, 7},
{forward, 1},
{down, 7},
{forward, 9},
{forward, 8},
{down, 7},
{forward, 5},
{forward, 4},
{down, 5},
{forward, 7},
{forward, 3},
{down, 2},
{forward, 2},
{forward, 2},
{down, 1},
{up, 8},
{down, 2},
{down, 2},
{forward, 6},
{up, 9},
{forward, 6},
{up, 6},
{forward, 5},
{forward, 5},
{down, 2},
{forward, 5},
{up, 5},
{forward, 5},
{up, 4},
{down, 1},
{up, 5},
{down, 2},
{forward, 3},
{down, 1},
{forward, 2},
{up, 4},
{down, 6},
{forward, 1},
{forward, 6},
{forward, 6},
{forward, 8},
{forward, 8},
{forward, 3},
{forward, 5},
{down, 8},
{up, 8},
{down, 6},
{down, 8},
{forward, 8},
{down, 6},
{forward, 4},
{down, 4},
{forward, 7},
{forward, 9},
{down, 6},
{up, 6},
{forward, 6},
{down, 9},
{up, 7},
{up, 9},
{down, 1},
{up, 5},
{forward, 2},
{forward, 3},
{up, 6},
{forward, 8},
{forward, 7},
{down, 4},
{up, 8},
{up, 2},
{down, 2},
{up, 3},
{down, 2},
{down, 8},
{forward, 9},
{up, 9},
{forward, 7},
{down, 9},
{forward, 4},
{forward, 3},
{forward, 2},
{down, 5},
{forward, 3},
{forward, 1},
{down, 2},
{forward, 3},
{down, 7},
{down, 8},
{forward, 9},
{down, 9},
{forward, 2},
{up, 5},
{up, 2},
{down, 8},
{down, 1},
{down, 7},
{forward, 6},
{down, 2},
{forward, 9},
{down, 6},
{down, 9},
{forward, 9},
{down, 2},
{up, 5},
{forward, 2},
{down, 7},
{down, 6},
{up, 1},
{forward, 9},
{up, 7},
{down, 1},
{forward, 5},
{down, 5},
{up, 2},
{forward, 6},
{forward, 2},
{up, 9},
{up, 7},
{down, 2},
{down, 1},
{forward, 6},
{down, 2},
{forward, 9},
{forward, 8},
{forward, 2},
{up, 1},
{down, 7},
{down, 7},
{forward, 5},
{forward, 9},
{down, 5},
{down, 5},
{down, 5},
{forward, 4},
{up, 4},
{down, 7},
{up, 6},
{forward, 3},
{up, 5},
{forward, 3},
{forward, 6},
{forward, 8},
{down, 6},
{forward, 4},
{forward, 5},
{up, 8},
{down, 9},
{down, 3},
{down, 8},
{forward, 8},
{forward, 1},
{down, 7},
{down, 2},
{forward, 8},
{forward, 7},
{up, 2},
{down, 9},
{forward, 2},
{down, 6},
{down, 7},
{up, 2},
{up, 7},
{down, 6},
{down, 8},
{down, 2},
{forward, 8},
{down, 6},
{up, 1},
{down, 6},
{down, 5},
{down, 8},
{down, 1},
{down, 4},
{down, 1},
{down, 8},
{up, 3},
{forward, 1},
{forward, 5},
{forward, 2},
{forward, 2},
{down, 5},
{down, 2},
{down, 8},
{up, 7},
{forward, 2},
{forward, 1},
{forward, 4},
{up, 4},
{down, 5},
{up, 4},
{down, 8},
{up, 5},
{down, 6},
{down, 8},
{down, 8},
{forward, 8},
{forward, 5},
{down, 1},
{down, 2},
{down, 4},
{forward, 5},
{up, 3},
{forward, 3},
{down, 7},
{forward, 9},
{down, 9},
{down, 5},
{forward, 5},
{down, 9},
{forward, 9},
{down, 5},
{up, 4},
{up, 9},
{forward, 1},
{forward, 6},
{forward, 9},
{forward, 2},
{up, 5},
{forward, 9},
{down, 8},
{up, 2},
{up, 9},
{forward, 1},
{down, 7},
{down, 4},
{down, 4},
{up, 3},
{forward, 6},
{down, 1},
{forward, 6},
{forward, 3},
{up, 3},
{forward, 1},
{down, 1},
{up, 8},
{up, 3},
{forward, 9},
{forward, 1},
{forward, 8},
{forward, 8},
{up, 7},
{forward, 2},
{forward, 9},
{down, 9},
{down, 2},
{down, 5},
{down, 1},
{forward, 9},
{forward, 9},
{up, 4},
{forward, 6},
{down, 3},
{forward, 2},
{forward, 5},
{up, 4},
{forward, 2},
{up, 1},
{up, 4},
{up, 3},
{up, 6},
{up, 6},
{down, 2},
{up, 7},
{down, 1},
{down, 3},
{forward, 3},
{up, 5},
{forward, 4},
{down, 5},
{forward, 9},
{down, 2},
{up, 5},
{forward, 9},
{down, 3},
{down, 5},
{forward, 3},
{forward, 7},
{forward, 9},
{up, 2},
{down, 6},
{up, 6},
{down, 8},
{forward, 8},
{down, 1},
{forward, 3},
{forward, 4},
{up, 6},
{up, 3},
{forward, 6},
{forward, 5},
{forward, 2},
{down, 7},
{down, 1},
{down, 5},
{forward, 6},
{down, 4},
{down, 2},
{forward, 7},
{up, 9},
{forward, 3},
{down, 2},
{up, 3},
{down, 3},
{down, 1},
{up, 5},
{down, 4},
{forward, 1},
{forward, 2},
{forward, 2},
{forward, 6},
{forward, 2},
{down, 2},
{down, 8},
{down, 1},
{down, 2},
{down, 7},
{up, 7},
{down, 7},
{forward, 7},
{forward, 7},
{down, 8},
{forward, 1},
{down, 7},
{down, 7},
{down, 8},
{up, 9},
{down, 4},
{up, 6},
{forward, 7},
{up, 2},
{down, 8},
{forward, 2},
{down, 8},
{forward, 4},
{down, 4},
{forward, 4},
{up, 1},
{down, 2},
{forward, 6},
{forward, 7},
{forward, 8},
{down, 2},
{forward, 5},
{forward, 1},
{up, 9},
{down, 8},
{down, 2},
{forward, 1},
{down, 8},
{forward, 2},
{up, 2},
{up, 3},
{up, 7},
{forward, 3},
{forward, 3},
{up, 3},
{up, 5},
{forward, 8},
{down, 6},
{forward, 6},
{down, 2},
{down, 7},
{forward, 3},
{forward, 6},
{down, 5},
{down, 6},
{up, 4},
{forward, 8},
{up, 8},
{down, 9},
{forward, 7},
{forward, 1},
{down, 6},
{up, 1},
{down, 7},
{forward, 4},
{forward, 8},
{down, 2},
{forward, 8},
{down, 3},
{down, 5},
{down, 5},
{forward, 8},
{down, 3},
{up, 8},
{down, 9},
{forward, 2},
{down, 9},
{forward, 4},
{up, 8},
{forward, 4},
{up, 1},
{forward, 8},
{forward, 2},
{forward, 5},
{down, 2},
{down, 6},
{up, 2},
{down, 8},
{forward, 9},
{forward, 5},
{forward, 6},
{forward, 4},
{down, 4},
{down, 6},
{up, 1},
{forward, 3},
{down, 6},
{forward, 6},
{forward, 1},
{forward, 6},
{forward, 9},
{up, 6},
{forward, 5},
{down, 4},
{forward, 5},
{down, 8},
{down, 7},
{forward, 7},
{up, 5},
{down, 6},
{forward, 4},
{forward, 6},
{forward, 5},
{up, 4},
{down, 3},
{forward, 1},
{down, 1},
{forward, 6},
{up, 1},
{up, 1},
{down, 7},
{forward, 5},
{forward, 1},
{down, 2},
{forward, 2},
{down, 3},
{down, 6},
{down, 5},
{down, 4},
{forward, 2},
{forward, 1},
{down, 7},
{forward, 9},
{up, 6},
{forward, 9},
{forward, 2},
{down, 1},
{forward, 9},
{forward, 4},
{down, 1},
{forward, 3},
{up, 9},
{down, 1},
{down, 3},
{down, 6},
{down, 9},
{forward, 3},
{down, 8},
{down, 3},
{forward, 5},
{forward, 1},
{forward, 5},
{forward, 2},
{up, 4},
{down, 6},
{up, 7},
{forward, 7},
{down, 9},
{forward, 6},
{down, 4},
{down, 1},
{up, 8},
{down, 4},
{forward, 7},
{forward, 5},
{down, 5},
{down, 2},
{down, 1},
{down, 4},
{up, 5},
{down, 8},
{forward, 1},
{forward, 2},
{down, 9},
{forward, 7},
{down, 8},
{forward, 5},
{forward, 7},
{forward, 2},
{down, 6},
{down, 5},
{down, 6},
{down, 7},
{forward, 2},
{up, 9},
{down, 3},
{forward, 1},
{up, 6},
{forward, 4},
{down, 3},
{up, 7},
{forward, 9},
{forward, 7},
{down, 4},
{up, 1},
{forward, 6},
{up, 4},
{down, 1},
{down, 4},
{down, 2},
{down, 5},
{down, 4},
{down, 7},
{forward, 2},
{down, 8},
{down, 8},
{forward, 9},
{forward, 3},
{down, 2},
{down, 2},
{forward, 2},
{down, 9},
{forward, 8},
{up, 8},
{down, 3},
{forward, 4},
{down, 9},
{up, 2},
{forward, 6},
{forward, 2},
{up, 6},
{up, 7},
{forward, 1},
{forward, 2},
{up, 2},
{down, 8},
{forward, 9},
{down, 7},
{forward, 1},
{down, 6},
{down, 8},
{forward, 2},
{down, 8},
{forward, 6},
{forward, 7},
{forward, 8},
{forward, 1},
{up, 8},
{down, 5},
{forward, 8},
{down, 3},
{down, 6},
{forward, 6},
{down, 4},
{down, 6},
{forward, 8},
{down, 3},
{down, 4},
{forward, 6},
{forward, 1},
{up, 1},
{up, 3},
{forward, 7},
{forward, 2},
{down, 1},
{down, 7},
{down, 3},
{down, 4},
{down, 3},
{forward, 2},
{forward, 4},
{down, 6},
{down, 2},
{forward, 3},
{down, 9},
{down, 5},
{down, 6},
{down, 7},
{down, 5},
{down, 3},
{forward, 5},
{forward, 6},
{down, 3},
{down, 1},
{up, 3},
{down, 8},
{down, 7},
{down, 5},
{up, 9},
{down, 8},
{down, 4},
{down, 2},
{forward, 4},
{forward, 9},
{forward, 1},
{forward, 7},
{down, 3},
{down, 4},
{up, 9},
{down, 6},
{forward, 9},
{down, 4},
{down, 2},
{down, 5},
{down, 3},
{forward, 2},
{forward, 9},
{forward, 3},
{down, 5},
{up, 1},
{down, 9},
{forward, 9},
{down, 7},
{forward, 6},
{down, 6},
{down, 9},
{down, 7},
{down, 8},
{down, 2},
{up, 3},
{forward, 6},
{forward, 3},
{up, 4},
{down, 6},
{down, 8},
{down, 2},
{down, 1},
{up, 9},
{down, 1},
{down, 8},
{forward, 5},
{forward, 4},
{forward, 9},
{forward, 3},
{forward, 9},
{down, 5},
{up, 9},
{down, 6},
{forward, 4},
{down, 6},
{forward, 4},
{forward, 9},
{down, 7},
{up, 9},
{up, 2},
{forward, 5},
{forward, 6},
{up, 2},
{forward, 8},
{down, 6},
{forward, 8},
{forward, 1},
{forward, 2},
{forward, 6},
{down, 3},
{up, 2},
{forward, 7},
{up, 8},
{forward, 2},
{forward, 5},
{forward, 4},
{up, 6},
{forward, 9},
{up, 8},
{down, 3},
{up, 7},
{up, 2},
{down, 2},
{up, 4},
{up, 5},
{forward, 5},
{down, 9},
{forward, 2},
{down, 1},
{down, 6},
{down, 4},
{down, 1},
{down, 1},
{forward, 4},
{forward, 7},
{down, 4},
{down, 2},
{forward, 7},
{down, 4},
{up, 1},
{up, 8},
{down, 6},
{down, 8},
{forward, 6},
{down, 8},
{up, 2},
{down, 7},
{forward, 5},
{forward, 8},
{down, 9},
{forward, 1},
{up, 7},
{down, 5},
{up, 1},
{up, 6},
{down, 3},
{down, 4},
{down, 9},
{down, 6},
{forward, 1},
{down, 1},
{forward, 4},
{down, 4},
{down, 8},
{up, 1},
{down, 7},
{forward, 1},
{down, 6},
{down, 4},
{down, 5},
{forward, 6},
{forward, 8},
{down, 5},
{down, 5},
{up, 3},
{forward, 8},
{down, 4},
{down, 3},
{up, 1},
{up, 8},
{forward, 1},
{down, 6},
{down, 2},
{down, 6},
{down, 1},
{forward, 9},
{down, 1},
{forward, 6},
{forward, 9},
{down, 5},
{up, 4},
{down, 5},
{down, 1},
{forward, 2},
{down, 2},
{forward, 9},
{down, 3},
{forward, 7},
{forward, 8},
{forward, 5},
{down, 7},
{down, 6},
{down, 8},
{forward, 7},
{up, 7},
{forward, 6},
{forward, 3},
{down, 2},
{forward, 9},
{forward, 4},
{down, 6},
{down, 6},
{up, 9},
{down, 1},
{forward, 5},
{forward, 2},
{forward, 2},
{forward, 2},
{down, 8},
{up, 1},
{down, 4},
{forward, 3},
{down, 3},
{up, 4},
{down, 6},
{forward, 2},
{forward, 8},
{forward, 9},
{forward, 3},
{down, 4},
{forward, 2},
{forward, 5},
{down, 5},
{up, 8},
{up, 9},
{up, 3},
{forward, 9},
{forward, 3},
{forward, 3},
{forward, 8},
{forward, 2},
{forward, 7},
{down, 8},
{down, 6},
{forward, 6},
{forward, 8},
{down, 1},
{forward, 3},
{down, 7},
{forward, 5},
{forward, 3},
{forward, 3},
{down, 3},
{down, 5},
{down, 2},
{down, 6},
{up, 2},
{up, 7},
{down, 9},
{forward, 6},
{down, 9},
{down, 8},
{up, 8},
{down, 1},
{forward, 9},
{down, 8},
{forward, 7},
{forward, 6},
{down, 5},
{down, 7},
{down, 4},
{forward, 7},
{down, 8},
{down, 9},
{down, 4},
{up, 8},
{forward, 2},
{up, 6},
{forward, 6},
{forward, 3},
{forward, 6},
{up, 9},
{forward, 1},
{down, 3},
{up, 6},
{down, 8},
{up, 4},
{up, 5},
{forward, 8},
{forward, 5},
{forward, 3},
{forward, 3},
{forward, 4},
{down, 4},
{forward, 2},
{up, 2},
{down, 7},
{down, 5},
{forward, 7},
{down, 8},
{forward, 3},
{up, 5},
{down, 4},
{down, 1},
{down, 5},
{forward, 6},
{forward, 8},
{forward, 6},
{down, 2},
{down, 7},
{forward, 6},
{forward, 2},
{forward, 7},
{down, 5},
{forward, 2},
{forward, 7},
{down, 9},
{down, 9},
{down, 4},
{down, 7},
{down, 3},
{forward, 1},
{up, 8},
{down, 7},
{forward, 2},
{forward, 4},
{up, 2},
{forward, 2},
{down, 2},
{up, 2},
{up, 9},
{forward, 1},
{down, 5},
{down, 1},
{forward, 8},
{up, 3},
{up, 4},
{down, 3},
{up, 2},
{down, 8},
{down, 6},
{down, 4},
{up, 7},
{forward, 4},
{down, 7},
{down, 4},
{up, 3},
{up, 8},
{down, 1},
{down, 7},
{forward, 1},
{down, 2},
{forward, 6},
{down, 9},
{forward, 3},
{down, 9},
{up, 5},
{up, 1},
{down, 4},
{forward, 1},
{down, 4},
{forward, 4},
{up, 4},
{forward, 7},
{down, 9},
{down, 2},
{down, 8},
{forward, 2},
{up, 3},
{forward, 2},
{down, 7},
{forward, 8},
{forward, 6},
{forward, 1},
{up, 9},
{forward, 7},
{up, 4},
{down, 4},
{down, 3},
{down, 7},
{forward, 5},
{forward, 3},
{forward, 7}
].