Maybot's Combinatorics Mafia - GAME OVER, MAFIA WIN

I’m honestly not sure who I would go for rn for a 3/3 and unfortunately I’m a bit too busy to re-eval the whole game again to figure it out

probably would go badeline/pandora/prisma but I haven’t looked that hard into these slots associations and would also ideally swap prisma out for somebody more active

hello!
was there something you wanted me to respond to that I missed?

no, we just entered thread at the same time lol

1 Like

Found it; problem is that I adapted it to solve Connections for me.
Gonna revert it and send it here.

I would probably switch out Pandora for…

I think Lee’s behaviour aligns with his scum metric but I can’t ignore the slip consideration or how others engaged with the topic.

Badeline and Goose both tried to disregard it, which is odd partner treatment for either, and Fusion declared reading suspicious vibes.

Maybe w!Lee could have misunderstood that jailing and beaming were separate at the time, since the OP reads “jail for the night”. Ruminating.

Quail doesn’t feel evil.

2 Likes

Here it is:

import math

#town = list(string.ascii_uppercase)[:9]
#masons = ["A", "B", "C"]

#town = list(range(8))
town = ["Quail", "Chomps", "LittleLee", "Ash", "Anonygoose", "Prisma101", "Magnus", "spookycat27", "pandora", "RedPandas", "FusionMoon314", "Badeline"]
masonGuesses = [["Chomps", "Anonygoose", "FusionMoon314"]]
masonResults = [1]

def getAllMasonPossibilities(town):
    finalArray = []
    for i in range(len(town)):
        for j in range(i + 1, len(town)):
            for k in range(j + 1, len(town)):
                finalArray.append([town[i], town[j], town[k]])
    return finalArray

def getAllMasonOptions(town, masonGuesses, masonResults):
    finalArray = []
    for i in range(len(town)):
        for j in range(i + 1, len(town)):
            for k in range(j + 1, len(town)):
                potentialMasons = [town[i], town[j], town[k]]
                fine = True
                for index in range(len(masonResults)):
                    if masonResults[index] != guess(potentialMasons, masonGuesses[index]):
                        fine = False
                if fine:
                    finalArray.append(potentialMasons)
    return finalArray

def guess(beam, masons):
    return sum([int(beamed in masons) for beamed in beam])

def convertArrayToKey(jailOption):
    return " - ".join(jailOption)

guessQualityDictionary = {}

masonPossibilities = getAllMasonPossibilities(town)

masonOptions = getAllMasonOptions(town, masonGuesses, masonResults)
numMasonOptions = len(masonOptions)

jailOptions = masonOptions + [[player, "None", "None"] for player in town] + [[town[i], town[j], "None"] for i in range(len(town) - 1) for j in range(i + 1, len(town))]

for option in jailOptions:
    results = [0] * 4
    attemptedGuesses = masonGuesses + [option]
    for potentialMasonSolution in masonOptions:
        results[guess(potentialMasonSolution, option)] += 1
    
    expectedInformationValue = 0
    for result in results:
        probability = result / numMasonOptions
        if probability > 0:
            expectedInformationValue += probability * math.log(1/probability, 2)
    
    guessQualityDictionary[convertArrayToKey(option)] = expectedInformationValue

guessQualityList = sorted(guessQualityDictionary.items(), key=lambda item: item[1], reverse=True)
guessQualityDictionary = dict(guessQualityList)

#print(guessQualityDictionary)

#print(guessQualityList)
for i in range(len(guessQualityList)):
    #print(guessQualityList[i][0])
    print("{0}, with {1} bits of information".format(guessQualityList[i][0], round(float(guessQualityList[i][1]), 4)))
1 Like

Ignore that pretty much everything is designed for a mason hunt; I wrote this when I was mafia and desperately trying to figure out who the masons were.

Should be the same results for everything given the nature of Combinatorics.

In summary, everything is useless, and we are all destined to die.
(The actual result is that mathematically, there’s no benefit to any particular wagon so long as it’s a legitimate possibility for the actual mafia, which includes not doing a partial jail.)

1 Like

@RedPandas
Do you think it’s more important to determine Goose’s alignment in your checks now, or to hunt for a 2 elsewhere first?

1 Like

VOTE: Badeline.
VOTE: Prisma.
VOTE: LittleLee.

1 Like

VOTE: Badeline.
VOTE: Prisma
VOTE: LittleLee

Well, that’s the first time I remember making that error.

1 Like

This is amusing in hindsight.
Not even because it’s innately wrong, just because it’s not where my thoughts resides.

1 Like

A 2/3 would be better mechanically but I don’t feel confident enough in any of my scumreads to shoot for it (I doubt it would actually hit a 2/3)

I’ll support your sanity check later in the day if there isn’t tangible wagon movement prior, then.

1 Like

the mafia thanks you

3 Likes

Tell them that I expect a return present.
Preferably chocolate.

2 Likes

RedPandas (3): RedPandas, spookycat27, Anonygoose
spookycat27 (3): RedPandas, spookycat27, Anonygoose
Anonygoose (1): RedPandas
Ash (3): Badeline, Chomps, pandora
Chomps (3): Badeline, Chomps, FusionMoon314
Badeline (2): pandora, Magnus
Quail (1): pandora
pandora (1): FusionMoon314
LittleLee (2): FusionMoon314, Magnus
Magnus (1): Anonygoose
Prisma101 (1): Magnus

Not Voting (4): Quail, LittleLee, Ash, Prisma101

The Mafia can’t afford chocolate, there’s no blood money income this game.

1 Like