On 2006-12-19 23:46:41 -0500, dblack / wobblini.net said: > [snip] > Here's a slightly modified version of your Ruby version. Part of the > problem in yours was that you were assigning to sub_sequence but then > throwing it away and calling combinations recursively on a different > sub-array of sequence. Erm, I think what you mean is that *all of my problem was that I was being an idiot". Yes, that seems to be it. > > def combinations(sequence, n, unique=true) > return [] if n == 0 > return sequence if n == 1 > > result = [] > > sequence.each_with_index do |e,i| > sub_sequence = sequence[(i + 1)..-1] > sub_sequence.concat(sequence[0...i]) if not unique > combinations(sub_sequence, n - 1, unique).each do |smaller| > result << [e] + [smaller] > end > end > > result > end > > > David def combinations sequence, n, unique=true return [] if n == 0 return sequence if n == 1 result = [] 0.upto(sequence.length - 1) do |i| sub_sequence = sequence[(i + 1)..-1] sub_sequence += sequence[0..i] if not unique combinations(sub_sequence, n - 1, unique).each do |smaller| result << [sequence[i]] + [smaller] end end result end This works perfectly now, but yours is far prettier, so I shall use it. Thank you! Best, James