number generator

MonkeeSage MonkeeSage at gmail.com
Sat Mar 10 20:19:38 EST 2007


On Mar 10, 6:47 pm, Paul Rubin <http://phr...@NOSPAM.invalid> wrote:
> The fencepost method still seems to be simplest:
>
>     t = sorted(random.sample(xrange(1,50), 4))
>     print [(j-i) for i,j in zip([0]+t, t+[50])]

Simpler, true, but I don't think it gives any better distribution...

import random
def cheat(n, m):
    N, M = n, m
    D    = M/N
    O    = [D] * N
    C    = []
    for i in O:
        C.append(random.randint(1, D-1))
    for i in range(0, len(O), 2):
        O[i] -= C[i]
        if i == len(O)-1:
            O[random.randint(0, i-1)] += C[i]
        else:
            O[i+1] += C[i]
    print 'CHEAT:'
    print O

def fence(n, m):
    t = sorted(random.sample(xrange(1,m), n-1))
    print 'FENCE:'
    print [(j-i) for i,j in zip([0]+t, t+[m])]

for i in range(10):
    print 'Run: %d:' % (i+1)
    cheat(10, 80)
    fence(10, 80)
    print

Output:

Run: 1:
CHEAT:
[1, 15, 1, 15, 5, 11, 5, 11, 1, 15]
FENCE:
[4, 9, 24, 7, 3, 9, 11, 7, 3, 3]

Run: 2:
CHEAT:
[1, 15, 5, 11, 5, 11, 1, 15, 7, 9]
FENCE:
[15, 12, 13, 7, 1, 4, 5, 6, 4, 13]

Run: 3:
CHEAT:
[1, 15, 3, 13, 3, 13, 2, 14, 7, 9]
FENCE:
[2, 9, 12, 15, 4, 5, 2, 3, 19, 9]

Run: 4:
CHEAT:
[7, 9, 2, 14, 5, 11, 4, 12, 3, 13]
FENCE:
[2, 2, 4, 7, 1, 11, 15, 13, 6, 19]

Run: 5:
CHEAT:
[5, 11, 3, 13, 5, 11, 7, 9, 4, 12]
FENCE:
[2, 4, 11, 10, 13, 16, 2, 18, 1, 3]

Run: 6:
CHEAT:
[5, 11, 3, 13, 2, 14, 6, 10, 1, 15]
FENCE:
[1, 4, 13, 5, 2, 26, 5, 4, 16, 4]

Run: 7:
CHEAT:
[4, 12, 4, 12, 4, 12, 4, 12, 5, 11]
FENCE:
[8, 3, 5, 15, 8, 15, 2, 3, 10, 11]

Run: 8:
CHEAT:
[3, 13, 5, 11, 6, 10, 1, 15, 2, 14]
FENCE:
[25, 15, 2, 5, 2, 10, 6, 1, 9, 5]

Run: 9:
CHEAT:
[6, 10, 3, 13, 2, 14, 1, 15, 5, 11]
FENCE:
[11, 9, 3, 3, 7, 4, 8, 28, 1, 6]

Run: 10:
CHEAT:
[2, 14, 3, 13, 6, 10, 2, 14, 2, 14]
FENCE:
[12, 5, 23, 2, 3, 4, 4, 11, 5, 11]

Granted, I'm just eyeballing it, but they look fairly equal in terms
of distribution.

Regards,
Jordan




More information about the Python-list mailing list