rendered paste bodyfrom math import sqrt
class players:
def __init__(self):
self.name=""
self.nh=0
self.pos=[]
self.place=""
#p1
player=players()
player.nh=2
player.pos=[1,1,1]
player.name="p1"
#p2
player2=players()
player2.nh=2
player2.pos=[2,2,2]
player2.name="p2"
player3=players()
#p3
player3.nh=3
player3.pos=[3,3,3]
player3.name="p3"
playerlist=[player, player2, player3]
class cHoopList:
def __init__(self):
self.pos=[0,0,0]
hoop1 = cHoopList()
hoop2 = cHoopList()
hoop3 = cHoopList()
hoop4 = cHoopList()
hoop5 = cHoopList()
HoopList=[hoop1,hoop2,hoop3,hoop4,hoop5]
def dist(a, b):
"""
Calculates the distance between two 3D points.
Requires 2 arguments namely 2 3D position lists.
"""
return sqrt((a[0]-b[0])**2+(a[1]-b[1])**2+(a[2]-b[2])**2)
def hoopsort(tempa):
tempd = {}
id = 0
for x in tempa:
tempd[x]=id
id+=1
templ=tempd.keys()
templ.sort()
newi=[]
for x in templ:
newi.append(tempd[x])
newi.reverse()
return newi
def distsort(tempa):
tempdist=[]
for x in tempa.keys():
id=0
for y in tempa.values()[0]:
tempdist.append(dist(playerlist[y].pos, HoopList[x].pos))
id+=1
print "tempdist", tempdist
tempd = {}
id = 0
for x in tempdist:
tempd[x]=id
id+=1
templ=tempd.keys()
templ.sort()
newi=[]
for x in templ:
newi.append(tempd[x])
return newi
##MAIN##
#create dictionary with repeatedHoop==key and value==correspondingPlayerlistId
evallist=[]
evaldict={}
evaldict2={}
placedict=["1st", "2nd", "3rd", "4th", "5th"]
for x in playerlist:
evallist.append(x.nh)
id=0
for x in playerlist:
if evallist.count(x.nh)>1:
if evaldict.has_key(x.nh):
evaldict[x.nh].append(id)
else:
evaldict[x.nh]=[id]
else:
if evaldict2.has_key(x.nh):
evaldict2[x.nh].append(id)
else:
evaldict2[x.nh]=[id]
id+=1
##testing evaldict
#print "Names: ", playerlist[0].name, playerlist[1].name, playerlist[2].name
#print "MultipleHoops: ", evaldict
#print "SingleHoops", evaldict2
#print "Evallist", evallist
#print ""
##debug
print "Names", playerlist[0].name, playerlist[1].name, playerlist[2].name
print "evallist", evallist
print "evaldict", evaldict
print "evaldict2", evaldict2
#means no dist calculations to do only hoop
id=0
id2=0
for x in evallist:
newi=hoopsort(evallist)
print "before if->id", id
print "before if->id2", id2
print "hoopsort->newi->", newi
if x!=evaldict.keys()[id2]:
playerlist[x].place=placedict[id]
else:
print x, evaldict.keys()[id2]
print "else->id", id
newi=distsort(evaldict)
playerlist[x].place=placedict[newi[id]]
id2+=1
id+=1
##testing hoopsort
print "Names", playerlist[0].name, playerlist[1].name, playerlist[2].name
print "Places", playerlist[0].place, playerlist[1].place, playerlist[2].place
print ""
#if evaldict!={}:
# newi=distsort(evaldict)
# id=0
# for x in evaldict.values()[0]:
# if x!= len(evaldict2.keys()):
# playerlist[x].place=placedict[newi[id]]
# id+=1
##testing distsort
#print "Names", playerlist[0].name, playerlist[1].name, playerlist[2].name
#print "Places", playerlist[0].place, playerlist[1].place, playerlist[2].place
#print "distsortNewi", newi
#print ""