-module(solution). -export([main/0]). -compile(export_all). main() -> { ok, [N]} = io:fread("", "~d"), A = lists:sort(read_array(N,"~d")), io:format("~p~n", [solve(A)]), true. read_array(0,_) -> []; read_array(N,D) -> {ok, [X]} = io:fread("", D), [X | read_array(N-1,D)]. solve (List) -> Orddict = lists:foldl( fun (N, D) -> orddict:update_counter(N, 1, D) end, orddict:new(), List), fun Split ([], MaxCount) -> MaxCount; Split ([{A,CA}, {B,CB} | T], MaxCount) when B == A+1 andalso CA+CB > MaxCount -> Split([{B,CB} | T], CA+CB); Split ([{_,CA} | T], MaxCount) when CA > MaxCount -> Split(T, CA); Split ([{_,CA}], MaxCount) when CA > MaxCount -> CA; Split ([_ | T], MaxCount) -> Split(T, MaxCount) end (Orddict, 0). %% |