Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Random numbers - the most efficient way
Message
From
07/09/2004 18:11:24
Dragan Nedeljkovich (Online)
Now officially retired
Zrenjanin, Serbia
 
 
General information
Forum:
Visual FoxPro
Category:
Coding, syntax & commands
Miscellaneous
Thread ID:
00939849
Message ID:
00940115
Views:
33
>>>Mohammed Qasem gave me a quite interesting problem, which I am now (12:13am) trying to solve the most elegant way.
>>>
>>>Here is a problem:
>>>
>>>We have a small set of records. We need to extract randomly smaller subset of records. Say, we have 300 records, we would need to randomly choose 40 records out of this set. Number of records to remove is always less than the number of records in a set.
>>
>>The way I used to do this before "select top n" was available, was to use an array with record numbers, select one element at random, remove it from array (using adel() and redimensioning the array).
>
>No need to redimension if you take the last avaialable entry and swap it with your currently selected "random" number. Used this for a card shuffle routine, no repeats.
>
>
DIMENSION aCards[52]
>FOR x=1 TO 52
>  aCards[x] = x
>ENDFOR
>RAND(0)
>FOR x=52 TO 1 STEP -1
>  nRnd = INT(RAND()*x) + 1
>  nMax = aCards[x]
>  ? aCards[nRnd]
>  aCards[nRnd] = nMax
>ENDFOR
Actually that's exactly what I'm doing in my solitaire game... check the link in my signature. Do we think alike or what :).

back to same old

the first online autobiography, unfinished by design
What, me reckless? I'm full of recks!
Balkans, eh? Count them.
Previous
Reply
Map
View

Click here to load this message in the networking platform