Range consolidation: Difference between revisions

Added Dyalect programming language
m (→‎{{header|Perl 6}}: Remove stray comma)
(Added Dyalect programming language)
Line 99:
(-1, 2), (3, 10)
(-6, -1), (1, 8)</pre>
 
=={{header|Dyalect}}==
 
{{trans|C#}}
 
<lang dyalect>func max(x, y) {
if x > y {
x
} else {
y
}
}
 
func min(x, y) {
if x < y {
x
} else {
y
}
}
 
func overlap(left, right) {
if max(left.s, left.e) > max(right.s, right.e) {
max(right.s, right.e) >= min(left.s, left.e)
} else {
max(left.s, left.e) >= min(right.s, right.e)
}
}
 
func consolidate(left, right) {
(s: min(min(left.s, left.e), min(right.s, right.e)), e: max(max(left.s, left.e), max(right.s, right.e)))
}
 
func normalize(range) {
(s: min(range.s, range.e), e: max(range.s, range.e))
}
 
for list in [
[ (s: 1.1, e: 2.2) ],
[ (s: 6.1, e: 7.2), (s: 7.2, e: 8.3) ],
[ (s: 4.0, e: 3.0), (s: 2, e: 1) ],
[ (s: 4.0, e: 3.0), (s: 2, e: 1), (s: -1, e: 2), (s: 3.9, e: 10) ],
[ (s: 1.0, e: 3.0), (s: -6, e: -1), (s: -4, e: -5), (s: 8, e: 2), (s: -6, e: -6) ]
] {
var z = list.len()-1
while z >= 1 {
for y in (z - 1)..0 {
if overlap(list[z], list[y]) {
list[y] = consolidate(list[z], list[y])
list.removeAt(z)
break
}
}
z -= 1
}
for i in list.indices() {
list[i] = normalize(list[i])
}
list.sort((x,y) => x.s - y.s)
print(list)
}
</lang>
 
{{out}}
 
<pre>[(s: 1.1, e: 2.2)]
[(s: 6.1, e: 8.3)]
[(s: 1, e: 2), (s: 3, e: 4)]
[(s: -1, e: 2), (s: 3, e: 10)]
[(s: -6, e: -1), (s: 1, e: 8)]</pre>
 
=={{header|Go}}==
Anonymous user