%% 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).
