aboutsummaryrefslogtreecommitdiff
path: root/challenge-327/deadmarshal/erlang/ch2.erl
blob: 4b8c78f64c78226e114f3979f1e2d64f7ed84fcf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
-module(ch2).
-export([mad/1]).

-spec zip(L1,L2) -> R when
    L1 :: [T],
    L2 :: [T],
    R :: [{T,T}],
    T :: integer().
zip(L1, L2) -> lists:reverse(zip(L1, L2, [])).

-spec zip(L1,L2,R) -> R when
    L1 :: [T],
    L2 :: [T],
    R :: [{T,T}],
    T :: integer().
zip([], _, Acc) -> Acc;
zip(_, [], Acc) -> Acc;
zip([X | Xs], [Y | Ys], Acc) ->
  zip(Xs, Ys, [{X, Y} | Acc]).

-spec mad(L) -> R when
    L :: [T],
    R :: [{T,T}],
    T :: integer().
mad([]) -> [];
mad([_]) -> [];
mad(L) ->
  Sorted = lists:sort(L),
  Pairs = zip(Sorted,tl(Sorted)),
  Diffs = lists:map(fun({A,B}) -> abs(A - B) end,Pairs),
  Min = lists:min(Diffs),
  [{A,B} || {A,B} <- Pairs, abs(A - B) =:= Min].