-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} ].