-module(day2).
--export ([solve/1, solve/2]).
+-export ([solve/0, solve/1, solve/2]).
+
+solve() ->
+ solve(['1']),
+ solve(['2']),
+ init:stop().
solve(A) ->
- D = [
+ 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},
{forward, 5},
{forward, 3},
{forward, 7}
-],
-
- solve(A, D).
-
-solve(['1'], D) ->
- io:format("The solution to puzzle day2 is: ~p", [solve(1, D)]);
-solve(1, 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;
-solve(['2'], D) ->
- io:format("The solution to puzzle day2 is: ~p", [solve(2, D)]);
-solve(2, 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.
-
+].