def fitClaims(RmReqs=[], TPReqs=[], TSReqs=[], TIReqs=[], TkReqs=[], usize=1): clearList() for i in range(0, 15): queryList(i) prks = [[i, len(pieces[i]) + random.random() * 0.05] for i in range(0, 15)] prks.sort(key=lambda a: a[1]) cTime = 1 for v in prks: cTime *= v[1] #print cTime #print prks #print "TenPower: "+str(math.log(cTime)/math.log(10)) # now we can intialize our basher startlist = list(cFit) for i in range(0, len(prks) - 1): adjacent[prks[i][0] + 1] = prks[i + 1][0] + 1 adjacent[prks[len(prks) - 1][0] + 1] = 16 alreadyHave = { tosBasher.get("vet"): False, tosBasher.get("ret"): False, tosBasher.get("mayor"): False } # vet is unique role, same as retri for i in range(0, usize): update(startlist, prks[0][0] + 1, alreadyHave, RmReqs, TPReqs, TSReqs, TIReqs, TkReqs)
def update(clist, idx): print idx if idx == 16: print "Found Solution" return True checkwise = list(types) random.shuffle(checkwise) while checkwise != []: next = checkwise.pop(0) if next == "RM" and clist[0] > 0: for rMaf in RM: if cPlayers[idx - 1].possible[rMaf]: clist[0] -= 1 q = update(clist, idx + 1) clist[0] += 1 if q: print idx, "was", "random mafia: ", rMaf, tosBasher.roles[ rMaf] return True else: break elif next == "MAFIOSO" and clist[1] > 0: if cPlayers[idx - 1].possible[tosBasher.get("mafioso")]: clist[1] -= 1 q = update(clist, idx + 1) if q == True: print idx, "was mafioso" return True clist[1] += 1 elif next == "GF" and clist[2] > 0: if cPlayers[idx - 1].possible[tosBasher.get("gf")]: clist[2] -= 1 q = update(clist, idx + 1) if q == True: print idx, "was gf" return True clist[2] += 1 elif next == "TP" and clist[3] > 0: for rMaf in TP: if cPlayers[idx - 1].possible[rMaf]: clist[3] -= 1 q = update(clist, idx + 1) clist[3] += 1 if q: print idx, "was", "town prot: ", rMaf, tosBasher.roles[ rMaf] return True else: break elif next == "TK" and clist[4] > 0: for rMaf in TK: if cPlayers[idx - 1].possible[rMaf]: clist[4] -= 1 q = update(clist, idx + 1) clist[4] += 1 if q: print idx, "was", "town killing: ", rMaf, tosBasher.roles[ rMaf] return True else: break elif next == "TS" and clist[5] > 0: for rMaf in TS: if cPlayers[idx - 1].possible[rMaf]: clist[5] -= 1 q = update(clist, idx + 1) clist[5] += 1 if q: print idx, "was", "town supportive: ", rMaf, tosBasher.roles[ rMaf] return True else: break elif next == "Jailor" and clist[6] > 0: if cPlayers[idx - 1].possible[tosBasher.get("jailor")]: clist[6] -= 1 q = update(clist, idx + 1) if q == True: print idx, "was jailor" return True clist[6] += 1 elif next == "TI" and clist[7] > 0: for rMaf in TI: if cPlayers[idx - 1].possible[rMaf]: clist[7] -= 1 q = update(clist, idx + 1) clist[7] += 1 if q: print idx, "was", "town investigative: ", rMaf, tosBasher.roles[ rMaf] return True else: break elif next == "RT" and clist[8] > 0: for rMaf in TS + TK + TP + TI: if cPlayers[idx - 1].possible[rMaf]: clist[8] -= 1 q = update(clist, idx + 1) clist[8] += 1 if q: print idx, "was", "town random: ", rMaf, tosBasher.roles[ rMaf] return True else: break elif next == "NK" and clist[9] > 0: for rMaf in NK: if cPlayers[idx - 1].possible[rMaf]: clist[9] -= 1 q = update(clist, idx + 1) clist[9] += 1 if q: print idx, "was", "newt kil: ", rMaf, tosBasher.roles[ rMaf] return True else: break elif next == "NE" and clist[10] > 0: for rMaf in NE: if cPlayers[idx - 1].possible[rMaf]: clist[10] -= 1 q = update(clist, idx + 1) clist[10] += 1 if q: print idx, "was", "newt evil: ", rMaf, tosBasher.roles[ rMaf] return True else: break return False
def player_oninvest(idx, role): cPlayers[idx - 1].onInvestResults(tosBasher.get(role))
def player_onclaim(idx, role): cPlayers[idx - 1].onClaim(tosBasher.get(role))
def accuse_jestClaim(idx, role): cPlayers[idx - 1].jesteryClaim(tosBasher.get(role))
def confirmed_jailorexe(idx, role): cPlayers[idx - 1].confirmedDeathJailorExe(tosBasher.get(role))
def confirmed_death(idx, role): cPlayers[idx - 1].confirmedDeath(tosBasher.get(role))
def confirmed_sure(idx, role): cPlayers[idx - 1].confirmedSelf(tosBasher.get(role))
def player_roleRemove(idx, role): cPlayers[idx - 1].exempt(tosBasher.get(role))
def setNE(role): global EXPLNE eid = tosBasher.get(role) print "operating under assumption of %s (%s) NE" % (role, eid) EXPLNE = [eid] print 'Please refresh'
def update(clist, idx, alreadyHave, RmReqs, TPReqs, TSReqs, TIReqs, TkReqs): ##print idx if idx == 16: ##print "Found Solution" push() return True checkwise = list(queryList(idx)) random.shuffle(checkwise) #print idx,clist,alreadyHave,checkwise while checkwise != []: next = checkwise.pop(0) if next == "RM" and clist[0] > 0: # First we need to checkwether number of RM slots left is greater lessthan or equal to RmReqs if clist[0] > len(RmReqs): for rMaf in RM: if cPlayers[idx - 1].possible[rMaf] and not checkBit( alreadyHave, rMaf): Required = rMaf in RmReqs if Required: RmReqs.remove(rMaf) clist[0] -= 1 setState(idx, "RM") q = update(clist, adjacent[idx], enableBit(alreadyHave, rMaf), RmReqs, TPReqs, TSReqs, TIReqs, TkReqs) clist[0] += 1 if q == True: #print idx,"was",tosBasher.roles[rMaf]," random MAFIA" return True if Required: RmReqs.append(rMaf) elif clist[0] == len(RmReqs): copy_RmReqs = list(RmReqs) for rMaf in copy_RmReqs: if cPlayers[idx - 1].possible[rMaf] and not checkBit( alreadyHave, rMaf): Required = rMaf in RmReqs RmReqs.remove(rMaf) clist[0] -= 1 setState(idx, "RM") q = update(clist, adjacent[idx], enableBit(alreadyHave, rMaf), RmReqs, TPReqs, TSReqs, TIReqs, TkReqs) clist[0] += 1 if q == True: #print idx,"was",tosBasher.roles[rMaf]," random MAFIA" return True if Required: RmReqs.append(rMaf) else: pass #print "More RM Claims than Slots :L" #Done! elif next == "MAFIOSO" and clist[1] > 0: if cPlayers[idx - 1].possible[tosBasher.get("mafioso")]: clist[1] -= 1 setState(idx, "MAFIOSO") q = update(clist, adjacent[idx], alreadyHave, RmReqs, TPReqs, TSReqs, TIReqs, TkReqs) clist[1] += 1 if q == True: #print idx,"was mafisoso" return True elif next == "GF" and clist[2] > 0: if cPlayers[idx - 1].possible[tosBasher.get("gf")]: clist[2] -= 1 setState(idx, "GF") q = update(clist, adjacent[idx], alreadyHave, RmReqs, TPReqs, TSReqs, TIReqs, TkReqs) clist[2] += 1 if q == True: #print idx,"was","gf" return True elif next == "TP" and clist[3] > 0: if TPReqs != []: copy_TP = list(TPReqs) for rMaf in copy_TP: if cPlayers[idx - 1].possible[rMaf] and not checkBit( alreadyHave, rMaf): clist[3] -= 1 TPReqs.remove(rMaf) setState(idx, "TP") q = update(clist, adjacent[idx], enableBit(alreadyHave, rMaf), RmReqs, TPReqs, TSReqs, TIReqs, TkReqs) clist[3] += 1 if q == True: #print idx,"was",tosBasher.roles[rMaf] return True TPReqs.append(rMaf) else: for rMaf in TP: if cPlayers[idx - 1].possible[rMaf] and not checkBit( alreadyHave, rMaf): clist[3] -= 1 setState(idx, "TP") q = update(clist, adjacent[idx], enableBit(alreadyHave, rMaf), RmReqs, TPReqs, TSReqs, TIReqs, TkReqs) clist[3] += 1 if q == True: #print idx,"was",tosBasher.roles[rMaf] return True elif next == "TP" and clist[8] > 0: if len(TPReqs) != 0: copy_TP = list(TPReqs) for rMaf in copy_TP: if cPlayers[idx - 1].possible[rMaf] and not checkBit( alreadyHave, rMaf): clist[8] -= 1 TPReqs.remove(rMaf) setState(idx, "TP") q = update(clist, adjacent[idx], enableBit(alreadyHave, rMaf), RmReqs, TPReqs, TSReqs, TIReqs, TkReqs) clist[8] += 1 if q == True: #print idx,"was",tosBasher.roles[rMaf] return True TPReqs.append(rMaf) elif len(TSReqs) == 0 and len(TkReqs) == 0 and len( TIReqs) == 0: # underassumption Tp Reqs is already empty for rMaf in TP: if cPlayers[idx - 1].possible[rMaf] and not checkBit( alreadyHave, rMaf): clist[8] -= 1 setState(idx, "TP") q = update(clist, adjacent[idx], enableBit(alreadyHave, rMaf), RmReqs, TPReqs, TSReqs, TIReqs, TkReqs) clist[8] += 1 if q == True: #print idx,"was",tosBasher.roles[rMaf] return True elif next == "TK" and clist[4] > 0: if len(TkReqs) != 0: copy_TK = list(TkReqs) for rMaf in copy_TK: if cPlayers[idx - 1].possible[rMaf] and not checkBit( alreadyHave, rMaf): TkReqs.remove(rMaf) clist[4] -= 1 setState(idx, "TK") q = update(clist, adjacent[idx], enableBit(alreadyHave, rMaf), RmReqs, TPReqs, TSReqs, TIReqs, TkReqs) clist[4] += 1 if q == True: #print idx,"was",tosBasher.roles[rMaf] return True TkReqs.append(rMaf) else: for rMaf in TK: if cPlayers[idx - 1].possible[rMaf] and not checkBit( alreadyHave, rMaf): clist[4] -= 1 setState(idx, "TK") q = update(clist, adjacent[idx], enableBit(alreadyHave, rMaf), RmReqs, TPReqs, TSReqs, TIReqs, TkReqs) clist[4] += 1 if q == True: #print idx,"was",tosBasher.roles[rMaf] return True elif next == "TK" and clist[8] > 0: if len(TkReqs) != 0: copy_TK = list(TkReqs) for rMaf in copy_TK: if cPlayers[idx - 1].possible[rMaf] and not checkBit( alreadyHave, rMaf): TkReqs.remove(rMaf) clist[8] -= 1 setState(idx, "TK") q = update(clist, adjacent[idx], enableBit(alreadyHave, rMaf), RmReqs, TPReqs, TSReqs, TIReqs, TkReqs) clist[8] += 1 if q == True: #print idx,"was",tosBasher.roles[rMaf] return True TkReqs.append(rMaf) elif len(TSReqs) == 0 and len(TPReqs) == 0 and len(TIReqs) == 0: for rMaf in TK: if cPlayers[idx - 1].possible[rMaf] and not checkBit( alreadyHave, rMaf): clist[8] -= 1 setState(idx, "TK") q = update(clist, adjacent[idx], enableBit(alreadyHave, rMaf), RmReqs, TPReqs, TSReqs, TIReqs, TkReqs) clist[8] += 1 if q == True: #print idx,"was",tosBasher.roles[rMaf] return True elif next == "TS" and clist[5] > 0: if len(TSReqs) != 0: copy_TS = list(TSReqs) for rMaf in copy_TS: if cPlayers[idx - 1].possible[rMaf] and not checkBit( alreadyHave, rMaf): clist[5] -= 1 TSReqs.remove(rMaf) setState(idx, "TS") q = update(clist, adjacent[idx], enableBit(alreadyHave, rMaf), RmReqs, TPReqs, TSReqs, TIReqs, TkReqs) clist[5] += 1 if q == True: #print idx,"was",tosBasher.roles[rMaf] return True TSReqs.append(rMaf) else: for rMaf in TS: if cPlayers[idx - 1].possible[rMaf] and not checkBit( alreadyHave, rMaf): clist[5] -= 1 setState(idx, "TS") q = update(clist, adjacent[idx], enableBit(alreadyHave, rMaf), RmReqs, TPReqs, TSReqs, TIReqs, TkReqs) clist[5] += 1 if q == True: return True elif next == "TS" and clist[8] > 0: if len(TSReqs) != 0: copy_TS = list(TSReqs) for rMaf in copy_TS: if cPlayers[idx - 1].possible[rMaf] and not checkBit( alreadyHave, rMaf): clist[8] -= 1 TSReqs.remove(rMaf) setState(idx, "TS") q = update(clist, adjacent[idx], enableBit(alreadyHave, rMaf), RmReqs, TPReqs, TSReqs, TIReqs, TkReqs) clist[8] += 1 if q == True: #print idx,"was",tosBasher.roles[rMaf] return True TSReqs.append(rMaf) elif len(TPReqs) == 0 and len(TkReqs) == 0 and len(TIReqs) == 0: for rMaf in TS: if cPlayers[idx - 1].possible[rMaf] and not checkBit( alreadyHave, rMaf): clist[8] -= 1 setState(idx, "TS") q = update(clist, adjacent[idx], enableBit(alreadyHave, rMaf), RmReqs, TPReqs, TSReqs, TIReqs, TkReqs) clist[8] += 1 if q == True: #print idx,"was",tosBasher.roles[rMaf] return True elif next == "Jailor" and clist[6] > 0: if cPlayers[idx - 1].possible[tosBasher.get("jailor")]: clist[6] -= 1 setState(idx, "Jailor") q = update(clist, adjacent[idx], alreadyHave, RmReqs, TPReqs, TSReqs, TIReqs, TkReqs) clist[6] += 1 if q == True: #print idx,"was","jailer" return True elif next == "TI" and clist[7] > 0: if len(TIReqs) != 0: copy_TK = list(TIReqs) for rMaf in copy_TK: if cPlayers[idx - 1].possible[rMaf] and not checkBit( alreadyHave, rMaf): clist[7] -= 1 TIReqs.remove(rMaf) setState(idx, "TI") q = update(clist, adjacent[idx], enableBit(alreadyHave, rMaf), RmReqs, TPReqs, TSReqs, TIReqs, TkReqs) clist[7] += 1 if q == True: #print idx,"was",tosBasher.roles[rMaf] return True TIReqs.append(rMaf) else: for rMaf in TI: if cPlayers[idx - 1].possible[rMaf] and not checkBit( alreadyHave, rMaf): clist[7] -= 1 setState(idx, "TI") q = update(clist, adjacent[idx], enableBit(alreadyHave, rMaf), RmReqs, TPReqs, TSReqs, TIReqs, TkReqs) clist[7] += 1 if q == True: #print idx,"was",tosBasher.roles[rMaf] return True elif next == "TI" and clist[8] > 0: if len(TIReqs) != 0: copy_TK = list(TIReqs) for rMaf in copy_TK: if cPlayers[idx - 1].possible[rMaf] and not checkBit( alreadyHave, rMaf): clist[8] -= 1 TIReqs.remove(rMaf) setState(idx, "TI") q = update(clist, adjacent[idx], enableBit(alreadyHave, rMaf), RmReqs, TPReqs, TSReqs, TIReqs, TkReqs) clist[8] += 1 if q == True: #print idx,"was",tosBasher.roles[rMaf] return True TIReqs.append(rMaf) elif len(TSReqs) == 0 and len(TkReqs) == 0 and len(TPReqs) == 0: for rMaf in TI: if cPlayers[idx - 1].possible[rMaf] and not checkBit( alreadyHave, rMaf): clist[8] -= 1 setState(idx, "TI") q = update(clist, adjacent[idx], enableBit(alreadyHave, rMaf), RmReqs, TPReqs, TSReqs, TIReqs, TkReqs) clist[8] += 1 if q == True: #print idx,"was",tosBasher.roles[rMaf] return True elif next == "NK" and clist[9] > 0: for rMaf in NK: if cPlayers[idx - 1].possible[rMaf] and rMaf in EXPLNK: clist[9] -= 1 setState(idx, "NK") q = update(clist, adjacent[idx], enableBit(alreadyHave, rMaf), RmReqs, TPReqs, TSReqs, TIReqs, TkReqs) clist[9] += 1 if q == True: #print idx,"was",tosBasher.roles[rMaf] return True elif next == "NE" and clist[10] > 0: for rMaf in NE: if cPlayers[idx - 1].possible[rMaf] and rMaf in EXPLNE: clist[10] -= 1 setState(idx, "NE") q = update(clist, adjacent[idx], enableBit(alreadyHave, rMaf), RmReqs, TPReqs, TSReqs, TIReqs, TkReqs) clist[10] += 1 if q == True: #print idx,"was",tosBasher.roles[rMaf] return True if adjacent[idx] == 16: pass #print "Ran out of options: ",idx,adjacent[idx],clist,queryList(idx),"didnt fit last min" else: pass #print "Ran out of options: ",idx,adjacent[idx],clist,queryList(idx) return False