Advertisement
Guest User

Untitled

a guest
Jan 14th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Erlang 1.36 KB | None | 0 0
  1. -module(gowno).
  2. -author("marcin").
  3. -compile([export_all]).
  4.  
  5. getGowno([]) -> [];
  6. getGowno([X]) -> [X];
  7. getGowno([H|Chuj]) ->  lists:map( fun(X) -> deepMerge(H, getGowno(X)) end, Chuj).
  8.  
  9. deepMerge(_, []) -> [];
  10. deepMerge(X, [[H|T]|C]) -> [deepMerge(X,[H|T])] ++ deepMerge(X, C);
  11. deepMerge(X, [H|T]) -> [X,H] ++ T.
  12.  
  13. reduceBrackets([[H|T]]) -> reduceBrackets([H|T]);
  14. reduceBrackets([H|T]) -> [H|T];
  15. reduceBrackets([]) -> [];
  16. reduceBrackets(X) -> X.
  17.  
  18. deepLength([]) -> 0;
  19. deepLength([_]) -> 1;
  20. deepLength([H|T]) -> lists:max(lists:map(fun(X) -> 1 + deepLength(X) end, [H|T]));
  21. deepLength(_) -> 0.
  22.  
  23. alignLists([]) -> [];
  24. alignLists([H|C]) ->
  25.   ReducedA = reduceBrackets([H|C]),
  26.   LengthA = deepLength(ReducedA),
  27.   LengthH = deepLength(H),
  28.   LengthC = deepLength(C),
  29.   if (LengthA == 1) -> ReducedA;
  30.   (LengthH > LengthC) -> alignLists(H) ++ [alignLists(C)];
  31.     (LengthH < LengthC) -> [alignLists(H)] ++ alignLists(C);
  32.     true ->
  33.       if ((LengthH == 1) or (LengthH == 0)) ->
  34.         [H] ++ C;
  35.         true ->
  36.           lists:merge(H,C)
  37.       end
  38.   end;
  39. alignLists(X) -> X.
  40.  
  41. alignBeats([]) -> [];
  42. alignBeats([H|T]) -> lists:map(fun(X) -> reduceBrackets(X) end, [H|T]).
  43.  
  44. findPaths([H|T]) -> alignBeats(alignLists(getGowno([H|T]))).
  45.  
  46. main() -> io:write(findPaths([1,[2,[3],[4]],[5]])).%io:write(alignBeats(alignLists([[[[1,2,3,6]],[1,2,4]],[1,5]]))).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement