Advertisement
Guest User

Untitled

a guest
Mar 29th, 2017
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.56 KB | None | 0 0
  1. defmodule S do
  2. def test do
  3. a = [[1, 3], [2, 6], [8, 10], [7, 11]]
  4. [[1,6], [7,11]] = interval(a)
  5.  
  6. a = [[5,12],[8,10]]
  7. [[5,12]] = interval(a)
  8.  
  9. a = [[1,6], [6,10]]
  10. ^a = interval(a)
  11.  
  12. :ok
  13. end
  14.  
  15. def interval(xs) do
  16. [[a,b]|xs] = Enum.sort(xs, fn([a, _], [b, _]) -> a <= b end)
  17. merge(xs, a, b, [])
  18. end
  19.  
  20. def merge([], a1, b1, ret), do: [[a1,b1]|ret] |> Enum.reverse
  21.  
  22. def merge([[a,b]|xs], a1, b1, ret) do
  23. case a < b1 do
  24. true -> merge(xs, a1, max(b1, b), ret)
  25. false -> merge(xs, a, b, [[a1,b1]|ret])
  26. end
  27. end
  28. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement