RosettaCodeData/Task/Combinations/Sidef/combinations-3.sidef

32 lines
474 B
Plaintext

func forcomb(callback, n, k) {
if (k == 0) {
callback([])
return()
}
if (k<0 || k>n || n==0) {
return()
}
var c = @^k
loop {
callback([c...])
c[k-1]++ < n-1 && next
var i = k-2
while (i>=0 && c[i]>=(n-(k-i))) {
--i
}
i < 0 && break
c[i]++
while (++i < k) {
c[i] = c[i-1]+1
}
}
return()
}
forcomb({|c| say c }, 5, 3)