Class: Statsample::Combination::CombinationRuby

Inherits:
Object
  • Object
show all
Defined in:
lib/statsample/combination.rb

Overview

:nodoc:

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(k, n) ⇒ CombinationRuby

Returns a new instance of CombinationRuby.



46
47
48
49
50
51
# File 'lib/statsample/combination.rb', line 46

def initialize(k,n)
  raise "k<=n" if k>n
  @k=k
  @n=n
  reset
end

Instance Attribute Details

#dataObject (readonly)

Returns the value of attribute data.



45
46
47
# File 'lib/statsample/combination.rb', line 45

def data
  @data
end

Instance Method Details

#eachObject



56
57
58
59
60
61
# File 'lib/statsample/combination.rb', line 56

def each
  reset
  while a=next_value
      yield a
  end
end

#next_valueObject



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/statsample/combination.rb', line 62

def next_value
  return false if !@data
  old_comb=@data.dup
  i = @k - 1;
  @data[i]+=1
  while ((i >= 0) and (@data[i] >= @n - @k + 1 + i)) do
    i-=1;
    @data[i]+=1;
  end
  
  if (@data[0] > @n - @k) # Combination (n-k, n-k+1, ..., n) reached */
    @data=false # No more combinations can be generated 
  else
    # comb now looks like (..., x, n, n, n, ..., n).
    # Turn it into (..., x, x + 1, x + 2, ...) 
    i = i+1
    (i...@k).each{ |i1|
        @data[i1] = @data[i1 - 1] + 1
    }
  end
  return old_comb
end

#resetObject



52
53
54
55
# File 'lib/statsample/combination.rb', line 52

def reset
  @data=[]
  (0...@k).each {|i| @data[i] = i }
end