Hi, first: you don't need the 'to_a' second: --------------------------------------- (0..5).inject{|x,y| print y, ' '} puts (1..5).inject(0){|x,y| print y, ' '} puts --------------------------------------- output: 1 2 3 4 5 1 2 3 4 5 If you provide no parameter to inject it will give you the first item of the enumerable as x. cheers Simon > -----Original Message----- > From: Paul Novak [mailto:novakps / gmail.com] > Sent: Monday, January 09, 2006 3:04 PM > To: ruby-talk ML > Subject: Re: [QUIZ.SOLUTION] Dice Roller (#61) We don't need > no steenking leexer/parsers > > No, the mis-understanding is all mine. You are right, otherwise it > will include an extra roll. It should be: > (1..self).to_a.inject(0){|x,y| x + rand(sides)}+self > > Further proof of the value of good unit tests. (Since (1..1).to_a > returns a single-member array, you need to provide inject with an > initial value to make it work.) > > Regards, > > Paul. > > > On 1/9/06, Gregory Seidman <gsslist+ruby / anthropohedron.net> wrote: > > > } # roll the dice > > } (0..self).to_a.inject{|x,y| x + rand(sides)}+self > > > > I think I may be misunderstanding something here. You use > 0..self, when I > > would think it would have to be either 0...self or 1..self > to get the right > > number of rolls. Am I off? In my solution I used 1..self in > much the same > > way. > >