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)