RosettaCodeData/Task/Range-consolidation/Yabasic/range-consolidation.basic
2023-07-01 13:44:08 -04:00

71 lines
1.5 KiB
Text

sub sort(tabla())
local items, i, t1, t2, s
items = arraysize(tabla(), 1)
repeat
s = true
for i = 1 to items-1
if tabla(i, 1) > tabla(i+1, 1) then
t1 = tabla(i, 1) : t2 = tabla(i, 2)
tabla(i, 1) = tabla(i + 1, 1) : tabla(i, 2) = tabla(i + 1, 2)
tabla(i + 1, 1) = t1 : tabla(i + 1, 2) = t2
s = false
end if
next
until(s)
end sub
sub normalize(tabla())
local items, i, t
items = arraysize(tabla(), 1)
for i = 1 to items
if tabla(i, 1) > tabla(i, 2) then
t = tabla(i, 1)
tabla(i, 1) = tabla(i, 2)
tabla(i, 2) = t
end if
next
sort(tabla())
end sub
sub consolidate(tabla())
local items, i
normalize(tabla())
items = arraysize(tabla(), 1)
for i = 1 to items - 1
if tabla(i + 1, 1) <= tabla(i, 2) then
tabla(i + 1, 1) = tabla(i, 1)
if tabla(i + 1, 2) <= tabla(i, 2) then
tabla(i + 1, 2) = tabla(i, 2)
end if
tabla(i, 1) = void : tabla(i, 2) = void
end if
next
end sub
// data 1, 1.1, 2.2
// data 2, 6.1, 7.2, 7.2, 8.3
// data 2, 4, 3, 2, 1
// data 4, 4, 3, 2, 1, -1, -2, 3.9, 10
data 5, 1,3, -6,-1, -4,-5, 8,2, -6,-6
void = 10^30
read items
dim tabla(items, 2)
for i = 1 to items
read tabla(i, 1), tabla(i, 2)
next
consolidate(tabla())
for i = 1 to items
if tabla(i, 1) <> void print tabla(i, 1), "..", tabla(i, 2);
next