RosettaCodeData/Task/Non-continuous-subsequences/Erlang/non-continuous-subsequences.erl
Ingy döt Net 776bba907c Sync
2013-10-27 22:24:23 +00:00

24 lines
762 B
Erlang

-module(rosetta).
-export([ncs/1]).
masks(N) ->
MaxMask = trunc(math:pow(2, N)),
Total = lists:map(fun(X) -> integer_to_list(X, 2) end,
lists:seq(3, MaxMask)),
Filtered = lists:filter(fun(X) -> contains_noncont(X) end, Total),
lists:map(fun(X) -> string:right(X, N, $0) end, Filtered). % padding
contains_noncont(N) ->
case re:run(N, "10+1") of
{match, _} -> true;
nomatch -> false
end.
apply_mask_to_list(Mask, List) ->
Zipped = lists:zip(Mask, List),
Filtered = lists:filter(fun({Include, _}) -> Include > 48 end, Zipped),
lists:map(fun({_, Value}) -> Value end, Filtered).
ncs(List) ->
lists:map(fun(Mask) -> apply_mask_to_list(Mask, List) end,
masks(length(List))).