Skip to content

Instantly share code, notes, and snippets.

@marcincembrzynski
Last active July 3, 2017 11:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save marcincembrzynski/f4c2618832167bd7779abad16e3ca5f5 to your computer and use it in GitHub Desktop.
Save marcincembrzynski/f4c2618832167bd7779abad16e3ca5f5 to your computer and use it in GitHub Desktop.
-module(f3).
-export([double/1,evens/1,sort/1,minimum/1,median/1,elem/2,elem/3,modesElem/2,modesElem/3,maxT/1,maxT2/2,modes/1,fst/1,occur/1]).
double([X]) -> [X * 2];
double([X|XS]) -> [(X * 2) | double(XS)].
evens([X]) -> [X];
evens([X|XS]) -> case (X rem 2 == 0) of
true -> [X | evens(XS)];
false -> evens(XS)
end.
sort([X]) -> [X];
sort([X|XS]) -> case (X == minimum([X|XS])) of
true -> [X | sort(XS)];
false -> sort(XS ++ [X])
end.
minimum([X]) -> X;
minimum([X|XS]) -> min(X,minimum(XS)).
elem(L,N) -> elem(L,N,0).
elem([X|XS],N,C) -> case (N == C) of
true -> X;
false -> elem(XS,N,C+1)
end.
median([X]) -> [X];
median(L) ->
M = length(L) div 2,
S = sort(L),
case (length(L) rem 2 == 0) of
true ->
(elem(S,M) + elem(S,M-1)) / 2;
false ->
elem(S,M)
end.
fst({A,_}) -> A.
maxT([X]) -> X;
maxT([X|XS]) -> maxT2(X,maxT(XS)).
maxT2({A,B},{C,D}) -> case (B > D) of
true -> {A,B};
false -> {C,D}
end.
modes(L) -> fst(maxT(occur(L))).
occur([X]) -> [{X,1}];
occur([X|XS]) -> [ {X, modesElem([X|XS],X)} | occur(XS)].
modesElem(L,E) -> modesElem(L,E,0).
modesElem([X],E,C) -> case (X == E) of
true -> C+1;
false -> C
end;
modesElem([X|XS],E,C) -> case (X == E) of
true -> modesElem(XS,E,C+1);
false -> modesElem(XS,E,C)
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment