Bumwinnah
Created 9/11/2026
Active
Nah i'd win
Avg score
5.869
Wins
8527
Losses
2374
Win rate
67.9%
Total battles: 12549
Score history
Avg: 5.869
Recent battles
- something 5.09 vs 5.22 Bumwinnah
- Bumwinnah 5.24 vs 5.42 Dilemma-Bot-Hackclub
- llama(1.6) 5.42 vs 5.74 Bumwinnah
- Bumwinnah 7.99 vs 7.99 Better-Tuff8 Tie
- Veritasium 5.34 vs 5.41 Bumwinnah
- apex predator v5 5.12 vs 5.18 Bumwinnah
- human test 1 4.49 vs 5.93 Bumwinnah
- Bumwinnah 5.41 vs 5.16 rollingdabeff
- Bumwinnah 5.44 vs 5.25 Chicken banana 🐔 🍌
- Test123 5.03 vs 4.97 Bumwinnah
- apex predator v4 5.2 vs 5.45 Bumwinnah
- Bumwinnah 5.65 vs 5.23 BIUN!!!
- llama(1.6) 4.99 vs 4.99 Bumwinnah Tie
- random 4.47 vs 6.47 Bumwinnah
- Bumwinnah 5.39 vs 5.11 Sigma Bot v2
- knight 5.32 vs 5.39 Bumwinnah
- Bumwinnah 4.96 vs 5.03 Test2
- Defect Half v2 4.62 vs 6.74 Bumwinnah
- Bumwinnah 5.14 vs 5.14 cop5 Tie
- Bumwinnah 8.52 vs 3.33 no
- Bumwinnah 4.96 vs 5.03 Always Defect
- Slim Jeans 5.31 vs 5.21 Bumwinnah
- defect until 2 cops 5.05 vs 4.93 Bumwinnah
- Bumwinnah 6.07 vs 3.71 FlippityFloppity v3
- Bumwinnah 5.31 vs 5.21 raju
- Bumwinnah 6.27 vs 4.57 Swimmingbot2
- Bumwinnah 5.36 vs 5.31 Defender varient
- jingolfika 5.1 vs 5.16 Bumwinnah
- Defender 3.0v 5.25 vs 5.25 Bumwinnah Tie
- ApexUltimate v4 5.1 vs 5.15 Bumwinnah
- Defected_Boy111 5.26 vs 5.38 Bumwinnah
- Aura67 5.36 vs 5.25 Bumwinnah
- goatbotv3.2 5.15 vs 5.43 Bumwinnah
- Mabey 5.02 vs 4.97 Bumwinnah
- Bumwinnah 5.4 vs 5.33 Wikipedia
- A Rational Individual 5.17 vs 5.5 Bumwinnah
- evil meow 5.07 vs 5.13 Bumwinnah
- zyxl bot 5.02 vs 4.97 Bumwinnah
- BestBot TFT Safe 4.89 vs 5.56 Bumwinnah
- GenerousTitForTat 7.06 vs 7.68 Bumwinnah
- hershey bot mentos v3 5.32 vs 5.38 Bumwinnah
- ThisIsRandom 3.96 vs 6.34 Bumwinnah
- Bumwinnah 5.25 vs 5.3 cop
- DR MUNDO v0.3 5.37 vs 5.37 Bumwinnah Tie
- Bumwinnah 7.09 vs 3.85 glitch v2.1 for stag hunt
- Bumwinnah 4.97 vs 5.02 defector
- Bumwinnah 5.3 vs 5.25 Cooperate2
- Bumwinnah 6.66 vs 3.13 Swimmingbot3
- JustDefunct 5.03 vs 4.96 Bumwinnah
- Bumwinnah 5.29 vs 5.24 Tieseeeeeeeeeeeeker v2
Source
export default function bot({ history, memory }) {
// ---- Initialize memory ----
memory = memory ?? {
oppDefections: 0, // total times opponent has defected
oppCoops: 0, // total times opponent has cooperated
myDefections: 0,
probeRound: 0, // counts rounds since our last "probe" defection
exploitMode: false, // true once we're confident opponent won't retaliate
};
const n = history.length;
// ---- First round: always start nice ----
if (n === 0) {
return ["C", memory];
}
const lastOpp = history.at(-1).opponent;
const lastMe = history.at(-1).you;
// Update running stats
if (lastOpp === "D") memory.oppDefections++;
else memory.oppCoops++;
const oppDefectRate = memory.oppDefections / n;
// ---- Detect "always defect" / highly aggressive opponents early ----
// Don't get suckered for long — after a few rounds of high aggression, just defect.
if (n >= 4 && oppDefectRate > 0.6) {
return ["D", memory];
}
// ---- Detect exploitable opponents (rarely/never retaliate) ----
// If we defected recently and they DIDN'T punish us, they're exploitable.
const weDefectedLastRound = lastMe === "D";
const theyPunishedUs = weDefectedLastRound && lastOpp === "D";
const theyLetItSlide = weDefectedLastRound && lastOpp === "C";
if (theyLetItSlide) {
memory.exploitMode = true;
}
if (theyPunishedUs) {
// They fight back — not safe to exploit, go back to reciprocal play.
memory.exploitMode = false;
}
if (memory.exploitMode) {
// Exploit them, but throw in occasional cooperation so a delayed
// punisher doesn't spiral us into mutual all-out defection.
const move = n % 5 === 0 ? "C" : "D";
memory.probeRound = 0;
return [move, memory];
}
// ---- Default: Generous Tit-for-Tat ----
// Copy opponent's last move, but occasionally forgive a defection
// (helps against noisy bots / recovers stuck defect-defect loops).
memory.probeRound++;
if (lastOpp === "D") {
const forgive = Math.random() < 0.1; // ~10% forgiveness chance
if (forgive) return ["C", memory];
return ["D", memory];
}
// Occasionally probe a cooperative-looking opponent to test if
// they're exploitable (only probe if they've been consistently nice).
const oppLooksNice = memory.oppCoops / n > 0.85;
const timeToProbe = memory.probeRound >= 8; // don't probe too often
if (oppLooksNice && timeToProbe && n > 6) {
memory.probeRound = 0;
return ["D", memory]; // test the waters
}
return ["C", memory];
}