Another update from ingydotnet^djgoku

This commit is contained in:
Ingy döt Net 2015-11-18 06:14:39 +00:00
parent 91df62d461
commit 948b86eafa
7604 changed files with 108452 additions and 22726 deletions

View file

@ -0,0 +1,30 @@
defmodule RC do
def range_extract(list) do
max = Enum.max(list) + 2
sorted = Enum.sort([max|list])
canidate_number = hd(sorted)
current_number = hd(sorted)
extract(tl(sorted), canidate_number, current_number, [])
end
defp extract([], _, _, range), do: Enum.reverse(range) |> Enum.join(",")
defp extract([next|rest], canidate, current, range) when current+1 >= next do
extract(rest, canidate, next, range)
end
defp extract([next|rest], canidate, current, range) when canidate == current do
extract(rest, next, next, [to_string(current)|range])
end
defp extract([next|rest], canidate, current, range) do
seperator = if canidate+1 == current, do: ",", else: "-"
str = "#{canidate}#{seperator}#{current}"
extract(rest, next, next, [str|range])
end
end
list = [
0, 1, 2, 4, 6, 7, 8, 11, 12, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
25, 27, 28, 29, 30, 31, 32, 33, 35, 36,
37, 38, 39
]
IO.inspect RC.range_extract(list)