How to generate a serial random number

Discussion in 'Ruby' started by Li Chen, Jan 15, 2008.

1. Li ChenGuest

Hi all,

I want to generate a serial of 5 random numbers based on the size of an
array(let say the size of array is 100).
Here are the rules:1) 5 random numbers are different 2) Once they are
generated they can't appear in the next round of random numbers. What is
the better way to do this? Now what I think of is to remove the items
corresponding to the random number from the previouse array and
eventually my array is smaller and smaller. Any other idea?

Thanks,

Li
--
Posted via http://www.ruby-forum.com/.

Li Chen, Jan 15, 2008

2. PhrogzGuest

On Jan 15, 6:43 am, Li Chen <> wrote:
> I want to generate a serial of 5 random numbers based on the size of an
> array(let say the size of array is 100).
> Here are the rules:1) 5 random numbers are different 2) Once they are
> generated they can't appear in the next round of random numbers. What is
> the better way to do this? Now what I think of is to remove the items
> corresponding to the random number from the previouse array and
> eventually my array is smaller and smaller. Any other idea?

I agree that removing the items is the way to go.

on your needs, you may want to just do something like:
@array = (1..2000).map{ rand(max_rand_size) }.uniq
You may end up with less then 2,000 values, depending on how big
max_rand_size is.

Then randomize the array.
@array = @array.sort_by{ rand }

Then just pop the values off the array each time you need one.
value = @array.pop

Here's a similar example I wrote in JavaScript for someone years ago:
http://phrogz.net/tmp/7x7_random.html
It differs in that it required a specific set of numbers in a random
but non-repeating order.

Phrogz, Jan 15, 2008

3. PhrogzGuest

[OT] Re: How to generate a serial random number

On Jan 15, 7:16 am, Phrogz <> wrote:
> You may end up with less then 2,000 values...

5.times{
me.stare_at( :word=>"then" )

me.stare_at( bject=>"fingers", :using=>:horror, :modifier=>:increasing )
}

me.rename( bject=>"fingers", "homonymic transcription devices" )

me.puts "Ugh. I _hate_ it when other people type that, too."

me.last_post.gsub 'less then', 'less than'

me.sigh

Phrogz, Jan 15, 2008

Re: [OT] Re: How to generate a serial random number

Phrogz <phrogz <at> mac.com> writes:

> On Jan 15, 7:16 am, Phrogz <> wrote:
> > You may end up with less then 2,000 values...

...
> me.last_post.gsub 'less then', 'less than'

If you want to be picky then it should be "fewer" too

You have "fewer" things you can have "a few" of
~~ fewer/a few values NOT fewer/a few time

You have "less" things you can have "a little" of
~~ less/a little time NOT less/a little values

But then you still have a "than" to deal with

5. Paul StickneyGuest

Re: [OT] Re: How to generate a serial random number

How "random" does random have to be?

Paul Stickney, Jan 15, 2008
6. Li ChenGuest

Li Chen, Jan 16, 2008