36 lines
1,010 B
Text
36 lines
1,010 B
Text
func main() {
|
|
let input = "-6,-3--1,3-5,7-11,14,15,17-20"
|
|
print("range: \(input)")
|
|
var r = []
|
|
var last = 0
|
|
for part in input.Split(',') {
|
|
var i = part[1..].IndexOf('-')
|
|
if i == -1 {
|
|
var n = Integer(part)
|
|
if r.Length() > 0 {
|
|
return print("duplicate value: \(n)") when last == n
|
|
return print("values not ordered: \(last) > \(n)") when last > n
|
|
}
|
|
r.Add(n)
|
|
last = n
|
|
} else {
|
|
var n1 = Integer(part[..i])
|
|
var n2 = Integer(part[(i + 2)..])
|
|
return print("invalid range: \(part)") when n2 < n1 + 2
|
|
|
|
if r.Length() > 0 {
|
|
return print("duplicate value: \(n1)") when last == n1
|
|
return print("values not ordered: \(last) > \(n1)") when last > n1
|
|
}
|
|
|
|
for i in n1..n2 {
|
|
r.Add(i)
|
|
}
|
|
last = n2
|
|
}
|
|
}
|
|
|
|
print("expanded: \(r)")
|
|
}
|
|
|
|
main()
|