#!/usr/bin/ruby
#
## https://rosettacode.org/wiki/Non-continuous_subsequences
#
func non_continuous(min, max, subseq=[], has_gap=false) {
static current = [];
range(min, max).each { |i|
current.push(i);
has_gap && subseq.append([current...]);
i < max && non_continuous(i.inc, max, subseq, has_gap);
current.pop;
has_gap = current.len;
}
subseq;
}
assert_eq(non_continuous(1, 3), [[1, 3]]);
assert_eq(non_continuous(1, 4), [[1, 2, 4], [1, 3], [1, 3, 4], [1, 4], [2, 4]]);
assert_eq(non_continuous("a", "d"), [["a", "b", "d"], ["a", "c"], ["a", "c", "d"], ["a", "d"], ["b", "d"]]);
assert_eq(non_continuous(1, 4), [[1, 2, 4], [1, 3], [1, 3, 4], [1, 4], [2, 4]]);
say "** Test passed!";