alan day5 and day6
This commit is contained in:
73
day6/day6.erl
Normal file
73
day6/day6.erl
Normal file
@@ -0,0 +1,73 @@
|
||||
%% to compile: erlc day3A.erl
|
||||
%% to run: erl -noshell -s day5 solve
|
||||
%%
|
||||
-module(day6).
|
||||
|
||||
-export ([solve/0, solve/1, solve/2]).
|
||||
-export ([read_input/0]).
|
||||
|
||||
solve() ->
|
||||
solve(['1']),
|
||||
solve(['2']),
|
||||
init:stop().
|
||||
|
||||
solve(A) ->
|
||||
solve(A, read_input()).
|
||||
|
||||
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).
|
||||
|
||||
read_input() ->
|
||||
{ok, IO} = file:open("input.txt", 'read'),
|
||||
Data = read_input(IO),
|
||||
file:close(IO),
|
||||
Data.
|
||||
|
||||
read_input(IO) ->
|
||||
read_line(IO).
|
||||
|
||||
read_line(IO) ->
|
||||
case file:read_line(IO) of
|
||||
'eof' -> 'eof';
|
||||
{ok, Line} -> parse_line(Line)
|
||||
end.
|
||||
|
||||
parse_line(Line) ->
|
||||
Points = string:tokens(Line, " ,->\n"),
|
||||
parse_line([list_to_integer(X) || X <- Points], [{0,0},{1,0},{2,0},{3,0},{4,0},{5,0},{6,0},{7,0},{8,0}]).
|
||||
|
||||
parse_line([], Acc) ->
|
||||
io:format("input: ~p~n", [Acc]),
|
||||
Acc;
|
||||
parse_line([H|T], Acc) ->
|
||||
{A, V} = lists:keyfind(H, 1, Acc),
|
||||
parse_line(T, lists:keyreplace(H, 1, Acc, {A, V + 1})).
|
||||
|
||||
solution1(Input) ->
|
||||
Fish = days(Input, 80),
|
||||
io:format("OUT: ~p~n", [Fish]),
|
||||
lists:foldl(fun({_A, V}, Acc) -> Acc + V end, 0, Fish).
|
||||
solution2(Input) ->
|
||||
Fish = days(Input, 256),
|
||||
io:format("OUT: ~p~n", [Fish]),
|
||||
lists:foldl(fun({_A, V}, Acc) -> Acc + V end, 0, Fish).
|
||||
days(Input, 0) ->
|
||||
Input;
|
||||
days(Input, Count) ->
|
||||
New =
|
||||
lists:foldl(fun({A, V}, AccIn) ->
|
||||
case A of
|
||||
0 ->
|
||||
{7, V1} = lists:keyfind(7, 1, Input),
|
||||
AccIn ++ [{6, V + V1},{8, V}];
|
||||
7 -> AccIn;
|
||||
_ -> AccIn ++ [{A-1, V}]
|
||||
end
|
||||
end, [], Input),
|
||||
days(New, Count -1).
|
||||
Reference in New Issue
Block a user