Range extraction: Difference between revisions

Added Wren
(→‎Haskell :: splitBy: Tidied, pruned out one import.)
(Added Wren)
Line 5,312:
{{out}}
<pre>0-2,4,6-8,11,12,14-25,27-33,35-39</pre>
 
=={{header|Wren}}==
{{trans|Kotlin}}
<lang ecmascript>var extractRange = Fn.new { |list|
if (list.isEmpty) return ""
var sb = ""
var first = list[0]
var prev = first
 
var append = Fn.new { |index|
if (first == prev) {
sb = sb + prev.toString
} else if (first == prev - 1) {
sb = sb + first.toString + "," + prev.toString
} else {
sb = sb + first.toString + "-" + prev.toString
}
if (index < list.count - 1) sb = sb + ","
}
 
for (i in 1...list.count) {
if (list[i] == prev + 1) {
prev = prev + 1
} else {
append.call(i)
first = list[i]
prev = first
}
}
append.call(list.count - 1)
return sb
}
 
var list1 = [-6, -3, -2, -1, 0, 1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20]
System.print(extractRange.call(list1))
var list2 = [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]
System.print(extractRange.call(list2))</lang>
 
{{out}}
<pre>
-6,-3-1,3-5,7-11,14,15,17-20
0-2,4,6-8,11,12,14-25,27-33,35-39
</pre>
 
=={{header|zkl}}==
9,485

edits