Class: Statsample::Combination::CombinationRuby
- Inherits:
-
Object
- Object
- Statsample::Combination::CombinationRuby
- Defined in:
- lib/statsample/combination.rb
Overview
:nodoc:
Instance Attribute Summary collapse
-
#data ⇒ Object
readonly
Returns the value of attribute data.
Instance Method Summary collapse
- #each ⇒ Object
-
#initialize(k, n) ⇒ CombinationRuby
constructor
A new instance of CombinationRuby.
- #next_value ⇒ Object
- #reset ⇒ Object
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
#data ⇒ Object (readonly)
Returns the value of attribute data.
45 46 47 |
# File 'lib/statsample/combination.rb', line 45 def data @data end |
Instance Method Details
#each ⇒ Object
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_value ⇒ Object
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 |
#reset ⇒ Object
52 53 54 55 |
# File 'lib/statsample/combination.rb', line 52 def reset @data=[] (0...@k).each {|i| @data[i] = i } end |