/* NetRexx */ options replace format comments java crossref symbols nobinary runSample(arg) return -- ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ -- Compact a list of numbers by reducing ranges method compact(expanded) public static nums = expanded.changestr(',', ' ').space -- remove possible commas & clean up the string rezult = '' RANGE = 0 FIRST = nums.word(1) -- set starting value loop i_ = 2 to nums.words -- each word in the string is a number to examine LOCAL = nums.word(i_) if LOCAL - FIRST - RANGE == 1 then do -- inside a range RANGE = RANGE + 1 end else do -- not inside a range if RANGE \= 0 then do -- we have a range of numbers so collect this and reset rezult = rezult || FIRST || delim(RANGE) || FIRST + RANGE || ',' RANGE = 0 end else do -- just collect this number rezult = rezult || FIRST || ',' end FIRST = LOCAL -- bump new starting value end end i_ if RANGE \= 0 then do -- terminating value is a range rezult = rezult || FIRST || delim(RANGE) || FIRST + RANGE end else do -- terminating value is a single number rezult = rezult || FIRST end return rezult.space(1, ',') -- format and return result string -- ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ -- determine if the range delimiter should be a comma or dash method delim(range) private static if range == 1 then dlm = ',' else dlm = '-' return dlm -- ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ -- sample driver method runSample(arg) public static parse arg userInput td = 0 if userInput.words > 0 then do -- use input from command line td[0] = td[0] + 1; r_ = td[0]; td[r_] = userInput end else do -- use canned test data td[0] = td[0] + 1; r_ = td[0]; td[r_] = ' -6, -3, -2, -1, 0, 1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20' td[0] = td[0] + 1; r_ = td[0]; td[r_] = ' 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' td[0] = td[0] + 1; r_ = td[0]; td[r_] = ' -4, -3, -2, 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' end loop r_ = 1 to td[0] say 'Original: ' td[r_].changestr(',', ' ').space(1, ',') say 'Compacted:' compact(td[r_]) say end r_ return