#!/usr/bin/python
# Lotto picker by manny juan (juanm@wellsfargo.com or manny@bdt.com)
from random import randint
import thread
import threading
def PickLotto(evt,thr,lock):
# every needs to know if the solution is found
# number of rolls
# loop variable
# if it's the final run
global gfound, groll, gj, gfinal_run
maxm=56; maxj=5; gj = groll = final_run = gfound = 0; lastn = [27,30,36,38,45,13]
# maxm=8; maxj=5; gj = groll = gfinal_run = gfound = 0; lastn = [2,3,6,7,8,13]
while gj <= groll and not gfound:
v=[]; m=maxm; r=range(m+1)
for k in range(maxj):
i=randint(1,m)
n=r[i]
r[i]=r[m]
m -= 1
v.append(n)
v.sort()
v.append(randint(1,46))
if not gfinal_run:
if v != lastn:
lock.acquire()
groll += 1
lock.release()
if gj % 1000 == 0:
lock.acquire()
print gj, thr
lock.release()
else:
gj = -1; gfinal_run = 1; this=1
lock.acquire()
gj += 1
lock.release()
gfound = 1
try:
if this:
print v, gj - 1, groll, i, this, "175,711,536 Win, Thread:", thr
# this guy found the solution. he sets event
evt.set()
except: UnboundLocalError
return
# immediate-mode commands, for drag-and-drop or execfile() execution
if __name__ == '__main__':
# create event object
evt = threading.Event()
lock=thread.allocate_lock()
for thr in range(10):
thread.start_new_thread(PickLotto,(evt,thr,lock))
# wait till someone found the solution and set event. then we all quit and go home
evt.wait()
else:
print "Module lotto imported."
print "To run, type: lotto.run()"
print "To reload after changes to the source, type: reload(lotto)"
# end of lotto.py
======== OUTPUT ============
[root@nqsyslog01 .t]# ./nr
0 8
1002 6
2000 1
[1, 3, 4, 7, 8, 36] 2975 2970 1 1 175,711,536 Win, Thread: 1
prints are gj loop var followed by thread number. if thread number abruptly
decreases, a thread is working on the final run. we know we are near the
solution.