Ruby 1.9.1 Array#combination kinda lazy

P

Phrogz

C:\>type tmp.rb
count = 0
combo = nil
(1..166).to_a.combination(5).each do |c|
count+= 1; combo = c
end
p count, combo

C:\>ruby -v tmp.rb
ruby 1.9.1p243 (2009-07-16 revision 24175) [i386-mingw32]
129462338
[5, 34, 54, 73, 81]

Yeah...no one could possibly need to run more than 129 million
combinations, and...I'm getting kinda tired, so...yeah, let's just
stop here.

WTF?
 
R

Ryan Davis

C:\>type tmp.rb
count = 0
combo = nil
(1..166).to_a.combination(5).each do |c|
count+= 1; combo = c
end
p count, combo

C:\>ruby -v tmp.rb
ruby 1.9.1p243 (2009-07-16 revision 24175) [i386-mingw32]
129462338
[5, 34, 54, 73, 81]

Yeah...no one could possibly need to run more than 129 million
combinations, and...I'm getting kinda tired, so...yeah, let's just
stop here.

WTF?

wfm:

#!/usr/bin/ruby -w

class Integer
def f!
(1..self).inject { |prod, n| prod * n }
end
end

expected = ((166.f!)/(5.f! * 161.f!).to_f).to_i # => 988455798

count = 0
combo = nil

(1..166).to_a.combination(5).each do |c|
count += 1; combo = c
end

p count, combo
p count == expected

# outputs:
#
# ~/.multiruby/install/1.9.1-p129/bin/ruby wtf.rb
# 988455798
# [162, 163, 164, 165, 166]
# true
 
P

Phrogz

C:\>ruby -v tmp.rb
ruby 1.9.1p243 (2009-07-16 revision 24175) [i386-mingw32]
129462338
[5, 34, 54, 73, 81]
wfm:
# ~/.multiruby/install/1.9.1-p129/bin/ruby  wtf.rb
# 988455798
# [162, 163, 164, 165, 166]

Just reproduced using 1.9.1p378 on Ubuntu. Looks to me like it's not a
Windows bug, but something introduced sometime between p129 and p243.
 
R

Ryan Davis

[Note: parts of this message were removed to make it a legal post.]



Just reproduced using 1.9.1p378 on Ubuntu. Looks to me like it's not a
Windows bug, but something introduced sometime between p129 and p243.

Report on ruby-core@ please.
 
P

Phrogz

C:\>ruby -v tmp.rb
ruby 1.9.1p243 (2009-07-16 revision 24175) [i386-mingw32]
129462338
[5, 34, 54, 73, 81]
wfm:
# ~/.multiruby/install/1.9.1-p129/bin/ruby  wtf.rb
# 988455798
# [162, 163, 164, 165, 166]

Just reproduced using 1.9.1p378 on Ubuntu. Looks to me like it's not a
Windows bug, but something introduced sometime between p129 and p243.

Interestingly, replacing 166 with 141 produces a RangeError:
in `combination': too big for combination

So this bug may be the same or related to http://redmine.ruby-lang.org/issues/show/3089,
which is marked as fixed in 1.9.2.

Will follow up with ruby-core.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,147
Messages
2,570,835
Members
47,382
Latest member
MichaleStr

Latest Threads

Top