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)
Beispiel #2
0
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
Beispiel #3
0
def player_oninvest(idx, role):
    cPlayers[idx - 1].onInvestResults(tosBasher.get(role))
Beispiel #4
0
def player_onclaim(idx, role):
    cPlayers[idx - 1].onClaim(tosBasher.get(role))
Beispiel #5
0
def accuse_jestClaim(idx, role):
    cPlayers[idx - 1].jesteryClaim(tosBasher.get(role))
Beispiel #6
0
def confirmed_jailorexe(idx, role):
    cPlayers[idx - 1].confirmedDeathJailorExe(tosBasher.get(role))
Beispiel #7
0
def confirmed_death(idx, role):
    cPlayers[idx - 1].confirmedDeath(tosBasher.get(role))
Beispiel #8
0
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