1 %% to compile: erlc day3A.erl
2 %% to run: erl -noshell -s day5 solve
6 -export ([solve/0, solve/1, solve/2]).
7 -export ([read_input/0]).
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)]);
27 {ok, IO} = file:open("input.txt", 'read'),
28 Data = read_input(IO),
36 case file:read_line(IO) of
38 {ok, Line} -> parse_line(Line)
42 Points = string:tokens(Line, " ,->\n"),
43 [list_to_integer(X) || X <- Points].
46 Max = lists:max(Input),
47 Min = lists:min(Input),
48 io:format("Max: ~p Min: ~p~n", [Max, Min]),
49 Fuels = [ fuel_needed(X, Input, fun fuel1/2) || X <- lists:seq(Min, Max)],
53 Max = lists:max(Input),
54 Min = lists:min(Input),
55 io:format("Soln2: Max: ~p Min: ~p~n", [Max, Min]),
56 Fuels = [ fuel_needed(X, Input, fun fuel2/2) || X <- lists:seq(Min, Max)],
59 fuel_needed(Pos, Data, Fuel_fun) ->
60 fuel_needed(Pos, Data, Fuel_fun, 0).
62 fuel_needed(_Pos, [], _, Acc) -> Acc;
63 fuel_needed(Pos, [H|T], Fuel_fun, Acc) ->
64 fuel_needed(Pos, T, Fuel_fun, Acc + Fuel_fun(H, Pos)).
67 fuel1(X, Y) when X > Y -> X - Y;
68 fuel1(X, Y) when Y > X -> Y - X.
71 fuel2(X, Y) when X > Y -> fuel_steps(X - Y);
72 fuel2(X, Y) when Y > X -> fuel_steps(Y - X).
77 fuel_steps(0, _Cost, Count) -> Count;
78 fuel_steps(X, Cost, Count) ->
79 fuel_steps(X - 1, Cost + 1, Count + Cost).