On Mar 10, 6:47 pm, Paul Rubin <http://[EMAIL PROTECTED]> 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 -- http://mail.python.org/mailman/listinfo/python-list