Even Distribution

Alex Tweedly alex at tweedly.net
Fri Apr 17 13:14:29 EDT 2020


Or to do the full distribution ...

put Njobs div Ndrivers into tMin
put NJobs mod Ndrivers into tExtras

repeat with i = 1 to NDrivers
    if i <= tExtras then
       allocate tMin+1
   else
      allocate tMin
   end if
end repeat

However, say your drivers are sorted alphabetically, then before long 
Andy will realise that he is being allocated more jobs that Zebedee. You 
could (sometimes) reverse the order of drivers - but then Mary loses out 
on jobs compared to both Andy and Zebedee. Or you could randomize the 
order of the drivers - but maybe they're also pre-sorted by location.

Instead, you want to even out the spread of extras across the drivers - 
so you need something like

repeat with i = 1 to Ndrivers
    if tExtras > (Ndrivers-i)/2 then
       allocate tMin+1
       subtract 1 from tExtras
   else
      allocate tMin
   end if
end repeat

(which still has a slight bias towards giving jobs to Zebedee - but it's 
so slight it will take probably take him years to notice :-)

Alex.

On 17/04/2020 05:28, Jerry Jensen via use-livecode wrote:
>   Hi Skip,
> Forgive me if this is not the answer you seek, or an oversimplification, but there is an easy way to find if the jobs can be exactly evenly distributed, with nothing left over:
> if (tjobs mod tdrivers) = 0 then // it is evenly distrutable.
> .Jerry
>
>> On Apr 16, 2020, at 7:41 PM, Skip Kimpel via use-livecode <use-livecode at lists.runrev.com> wrote:
>>
>> I have working on creating a loop that would divide the number of jobs by
>> the number of users and then checking to see to see if it is evenly
>> divisible but that is kind of where I am stuck.  Everything I have tried
>> thus far has proven to be unsuccessful.
>
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode




More information about the use-livecode mailing list