Subject Re: random
From Charlie <trainman@traincitylcom>
Date Tue, 28 Jun 2016 19:28:11 -0400
Newsgroups dbase.getting-started

Wow thanks!  I'll study and work on this!!!

Mervyn Bick Wrote:

> On 26/06/2016 14:53, Charlie wrote:
> > Hi.. Could someone push me in the right direction?
> >
> > I have a database of say 40 golfers.  19 of those golfers are going to play in the upcoming tournament.  The 19 are selected so you have a filter with the 19 active golfers.  There are 5 golfers who are considered slow.  So I want to fit them in each group and possibly 2 at the end so play moves relatively smoothly.
> >
> > Then I would like to randomly place the rest of the golfers in a configuration of 3-somes and 4-somes with the 3-somes in the front of the group.  I'm not sure how to work this out in dbase.  I am writing this in oodml.  I have the database set up already.
> >
> > We have three tournaments a week and I want to make a schedule for each day, email each member that the tourney is scheduled and post the schedule to a web site in html.   I think I can figure this part out, but the order and grouping is not something I'm confident with. (or even have a clue!)
> >
> > Thanks for any help!
> >
>
> The attached example uses an algorithm normally used for shuffling decks
> of cards in computer programs.
>
> "Normal" players and "slow" players are extracted from the membership
> table and added to two separate arrays.  These arrays, one with 14
> entries and the other with 5 entries, are "shuffled" and then recombined
> into one array.
>
> I've set things up as 1 3-some  and 4 4-somes with matches 2,3,and 4
> having one "slow" player and match 5  having 2 "slow" players.  If you
> want a different arrangement of matches you will need to change the way
> the interleaving is done.  You will also need to change the way the
> match number is calculated.
>
> An array is created for each of the three days and these are used to
> create a table.  The table is overwritten every time the program is run
> so be sure to make backup copy immediately.  If you destroy the table
> there is no way of recreating it exactly.
>
> Mervyn.
>
>
>
>
>
>
>
>
>
> //create sample file for example
> clear
> close all
> if file('shuffle.dbf')
> //  drop table shuffle
> endif
>
> if not file('shuffle.dbf')
>    create table shuffle  (id autoinc,name character(25), selected boolean,slow boolean)
>
>
>    use shuffle
>    for n = 65 to 84
>       append blank
>       replace name with chr(n)
>    next
>    for n = 97 to 116
>       append blank
>       replace name with chr(n)
>    next
>    go top
>    for n = 1 to 19
>       replace selected with true
>       skip 2
>      
>    next
>    go top
>    for n = 1 to 5
>       replace slow with true
>       replace name with trim(name) + '  ***'
>       skip 4
>    next
>    use
> endif
> *************************************************
>
> ******* create tables for each day's matches
>   i = random(-1)
>   aDay1 = build_array()
>   aDay2 = build_array()  
>   aDay3 = build_array()  
>  
>  
>  if file('matches.dbf')
>    drop table matches
> endif
>
> if not file('matches.dbf')
>    create table matches  (id autoinc,name character(25),day_no int,;
>      match int)
>    
>    q = new query()
>    q.sql = 'select * from matches'
>    q.active = true  
>    for nDay = 1 to 3
>       nMatch = 1
>       for n = 0 to 18
>           q.rowset.beginAppend()
>           cmd = "q.rowset.fields['name'].value = aDay"+nDay+"[n+1]"
>           ?cmd
>           &cmd
>           q.rowset.fields['day_no'].value = nDay
>           if n%4 = 3
>              nMatch ++
>            endif
>            q.rowset.fields['match'].value = nMatch
>        next
>        q.rowset.save()      
>     next
>     q.active = false
> endif    
>  
>  
>
>
>    function build_array
>       ***** Create an aray aPlayers1 for 14 normal players
>       aPlayers1 = new array()
>       q = new query()
>       q.sql = 'select name from shuffle where selected = true and not slow = true'
>       q.active = true
>       do while not q.rowset.endofset
>         aPlayers1.add(q.rowset.fields['name'].value)
>         q.rowset.next()
>       enddo
>       q.active = false
> //      if type('i') = 'U'
> //      ?'i'
> //         i = random(-1) //initlise random() by passing and argument. Only do this once.
> //      endif
>       for n = aPlayers1.size -1 to 1 step -1
>          do  
>            i = int(random()*15)
>          until i>0 and i<15
>          ?i
>          a1 = aPlayers1[n]
>          a2 = aPlayers1[i]
>          aPlayers1[n] = a2
>          aPlayers1[i] = a1
>       next
>       ****** Create and array aPlayers2 for slow players
>       aPlayers2 = new array()
>       q = new query()
>       q.sql = 'select name from shuffle where selected = true and slow = true'
>       q.active = true
>       do while not q.rowset.endofset
>         aPlayers2.add(q.rowset.fields['name'].value)
>         q.rowset.next()
>       enddo
>       q.active = false
>       i = random(-1)
>       for n = aPlayers2.size -1 to 1 step -1
>          do  
>            i = int(random()*6)
>          until i>0 and i<6
>          a1 = aPlayers2[n]
>          a2 = aPlayers2[i]
>          aPlayers2[n] = a2
>          aPlayers2[i] = a1
>       next
>       ******* Create an array aPlayers and interleave normal and slow players.
>       **** Match 1      3 Ball   3 normal players
>       **** Match 2,3,4  4 Ball   3 normal players  1 slow player
>       **** Match 5      4 Ball   2 normal players  2 slow players
>
>
>       //   1 X 3 ball, 4 X 4 ball
>       i = 1
>       aPlayers = new array()
>       for n = 1 to 6
>         aPlayers.add(aPlayers1[n])
>       next
>       aPlayers.add(aPlayers2[i])
>       i ++  
>       for n = 7 to 9
>         aPlayers.add(aPlayers1[n])
>       next  
>       aPlayers.add(aPlayers2[i])
>       i ++  
>       for n = 10 to 12
>         aPlayers.add(aPlayers1[n])
>       next  
>       aPlayers.add(aPlayers2[i])
>       i ++  
>       for n = 13 to 14
>         aPlayers.add(aPlayers1[n])
>       next  
>       aPlayers.add(aPlayers2[i])
>       i ++
>       aPlayers.add(aPlayers2[i])
>       return aPlayers
>
>
>
>
>
>