diff --git a/day4.erl b/day4.erl index 5fb3871..714e3f0 100644 --- a/day4.erl +++ b/day4.erl @@ -4,21 +4,26 @@ solve(InputData) -> Lines = binary:split(InputData, <<$\n>>, [trim_all, global]), - {part1(Lines), none}. + solver(Lines, {0, 0}). -part1([]) -> 0; -part1([Entry | Rest]) -> +solver([], Acc) -> Acc; +solver([Entry | Rest], {Part1, Part2}) -> Ranges = binary:split(Entry, <<",">>, [trim_all, global]), [[F1, F2], [S1, S2]] = lists:map(fun(Range) -> binary:split(Range, <<"-">>, [trim_all, global]) end, Ranges), First = {binary_to_integer(F1), binary_to_integer(F2)}, Second = {binary_to_integer(S1), binary_to_integer(S2)}, - io:format("~n~p ~p", [First, Second]), - case range_intersect(First, Second) of - First -> 1; - Second -> 1; - _SomethingElse -> io:format(" out"), 0 - end + part1(Rest). + Intersection = range_intersect(First, Second), + {P1Flag, P2Flag} = + case Intersection of + First -> {1, 1}; + Second -> {1, 1}; + SomethingElse -> + case range_is_empty(Intersection) of + false -> {0, 1}; + true -> {0, 0} + end + end, + solver(Rest, {Part1+P1Flag, Part2+P2Flag}). -range_empty() -> {0, -1}. range_is_empty({Bottom, Top}) -> Top < Bottom. range_intersect({B1, T1}, {B2, T2}) -> {max(B1, B2), min(T1, T2)}.