1 %% to compile: erlc day3A.erl
2 %% to run: erl -noshell -s day5 solve
6 -export ([solve/0, solve/1, solve/2]).
7 -compile ([export_all]).
15 solve(A, read_input()).
18 io:format("The solution to ~p puzzle1 is: ~p~n", [?MODULE, solve(1, D)]);
22 io:format("The solution to ~p puzzle2 is: ~p~n", [?MODULE, solve(2, D)]);
29 {T, X1, Y1} = lists:max([{Key, X1, proplists:get_value(Key,Ys)} || {Key, X1} <- Xs, lists:keysearch(Key, 1, Ys) /= false]),
35 length(lists:usort([{X,Y} || {Ty, Y} <- Ys, {T,X} <- lists:filter(fun({T,X}) -> T == Ty end, Xs)])).
38 {{124,174},{-123, -86}}.
39 %% {{20,30},{-10, -5}}.
41 find_x({Xmin, Xmax}) ->
42 [ {T, Xstart} || Xstart <- lists:seq(0,400), T <- lists:seq(1,1000), x(Xstart, T) >= Xmin, x(Xstart, T) =< Xmax ].
44 find_y({Ymin, Ymax}) ->
45 [ {T, Ystart} || Ystart <- lists:seq(-400,400), T <- lists:seq(1,1000), y(Ystart, T) >= Ymin, y(Ystart, T) =< Ymax ].
49 case (Xstart - T + 1) of
53 (Xstart - Last + 1) * (Xstart + Last) div 2.
56 Last = (Ystart - T + 1),
57 (Ystart - Last + 1) * (Ystart + Last) div 2.
59 y_max(0, _, Ymax) -> Ymax;
67 y_max(T-1, Y, NewMax).