Bumwinnah2
Created 9/11/2026
Active
Nah i'd win
Avg score
6.761
Wins
3564
Losses
7669
Win rate
28.1%
Total battles: 12702
Score history
Avg: 6.761
Recent battles
- Bumwinnah2 8.46 vs 8.39 Miyagi-do
- Aura67 8.45 vs 8.12 Bumwinnah2
- Test 5.75 vs 4.63 Bumwinnah2
- BeeBot3 8.22 vs 8.22 Bumwinnah2 Tie
- Bumwinnah2 4.49 vs 5.47 detective
- Test 5.96 vs 4.98 Bumwinnah2
- Harvest V2 MAX 7 vs 8.07 Bumwinnah2
- Slim Jeans 8.02 vs 7.23 Bumwinnah2
- Bumwinnah2 3.95 vs 5.87 Corn Farmer v2
- Aura67 8.46 vs 8.14 Bumwinnah2
- playing.to.win 5.91 vs 4.98 Bumwinnah2
- Bumwinnah2 8.84 vs 9.51 Castifier 2.0v
- Agnes-distill-Tachyon-v3 8.26 vs 8.33 Bumwinnah2
- BIUN V3 7.87 vs 8.2 Bumwinnah2
- mahoraga v2 5.27 vs 4.64 Bumwinnah2
- Bumwinnah2 6.51 vs 8.51 Mark3 Test
- Oliver 2 8.38 vs 8.38 Bumwinnah2 Tie
- NexBot VI 8.52 vs 8.21 Bumwinnah2
- Bumwinnah2 8.46 vs 8.39 Zeus 2
- Bumwinnah2 8.29 vs 9.45 Defender 3.0v
- ApexUltimate v3 6.18 vs 4.42 Bumwinnah2
- Agnes-distill-Tachyon-v2 7.96 vs 8.47 Bumwinnah2
- Bumwinnah2 8.29 vs 8.29 Wikipedia Tie
- Agnes-distill-Tachyon-v3 8.26 vs 8.33 Bumwinnah2
- Bumwinnah2 4.44 vs 6.05 jingolfika
- Bumwinnah2 4.64 vs 5.87 apex predator v5
- Bumwinnah2 6.82 vs 7.78 Swimmingbot1v3
- Bumwinnah2 4.96 vs 5.87 AaravC Bot 1
- Bumwinnah2 4.17 vs 7.16 Not my bot
- Bumwinnah2 4.98 vs 5.91 Gridger
- JustBeatIt V7 7.75 vs 6.2 Bumwinnah2
- Number 1 1.93 vs 8.21 Bumwinnah2
- Firstborn v2 5.67 vs 4.9 Bumwinnah2
- bigger memory 8.27 vs 8.27 Bumwinnah2 Tie
- Bumwinnah2 8.6 vs 8.6 Smarty Pants V1 Tie
- Bumwinnah2 6.99 vs 7.93 Apex
- Bumwinnah2 4.71 vs 5.22 yes
- Královecký kraj 8.43 vs 8.48 Bumwinnah2
- Mark 5 5.85 vs 3.97 Bumwinnah2
- Corn Farmer v2 5.77 vs 4.07 Bumwinnah2
- Mark3 8.36 vs 8.03 Bumwinnah2
- Bumwinnah2 8.54 vs 8.37 test(1.2)
- Bumwinnah2 4.7 vs 5.22 Always Defect
- Bumwinnah2 6.42 vs 7.02 GradualAdaptive
- Adaptative v3.1.1 7.81 vs 7.75 Bumwinnah2
- Královecký kraj 8.56 vs 8.56 Bumwinnah2 Tie
- A Rational Individual 5.31 vs 5.58 Bumwinnah2
- apex predator v5 6.11 vs 4.45 Bumwinnah2
- BIUN!!! 7.23 vs 4.56 Bumwinnah2
- Harvest V2 MAX 6.99 vs 8.07 Bumwinnah2
Source
export default function bot({ history, memory }) {
memory = memory ?? {
pattern: null, // detected opponent archetype
myMoves: [],
oppMoves: [],
streakC: 0,
streakD: 0,
alternateCheck: true,
};
const n = history.length;
if (n === 0) {
return ["C", memory];
}
const lastOpp = history.at(-1).opponent;
memory.oppMoves.push(lastOpp);
if (lastOpp === "C") { memory.streakC++; memory.streakD = 0; }
else { memory.streakD++; memory.streakC = 0; }
// ---- Phase 1 (rounds 1-10): identify opponent archetype ----
if (n <= 10) {
memory.pattern = detectPattern(memory.oppMoves);
const move = "C"; // stay cooperative while gathering data
memory.myMoves.push(move);
return [move, memory];
}
// Re-check pattern periodically in case opponent shifts strategy
if (n % 15 === 0) {
memory.pattern = detectPattern(memory.oppMoves.slice(-15));
}
let move;
switch (memory.pattern) {
case "alwaysCooperate":
// Pure exploitation — they never punish.
move = "D";
break;
case "alwaysDefect":
// No point cooperating, just match them (avoid the 0-point sucker payoff).
move = "D";
break;
case "titForTat":
// Mirror-matching TFT just locks in mutual cooperation forever —
// that's actually great (2 pts/round), so cooperate.
move = "C";
break;
case "random":
// Against unpredictable opponents, defect slightly more than cooperate
// since expected value favors D when opponent is 50/50.
move = Math.random() < 0.55 ? "D" : "C";
break;
case "grudger":
// Never defect against a grudger — one slip locks in 1pt/round forever.
move = "C";
break;
default:
// Unknown/mixed pattern: fall back to reciprocal play with slight
// optimism (cooperate on ties).
move = lastOpp === "D" ? "D" : "C";
}
memory.myMoves.push(move);
return [move, memory];
}
// Heuristic pattern detector based on recent opponent move history
function detectPattern(moves) {
if (moves.length < 5) return "unknown";
const total = moves.length;
const defects = moves.filter(m => m === "D").length;
const defectRate = defects / total;
if (defectRate === 0) return "alwaysCooperate";
if (defectRate === 1) return "alwaysDefect";
// Grudger signature: mostly C, then switches to all D and stays D
const lastThird = moves.slice(Math.floor(total * 2 / 3));
const firstTwoThirds = moves.slice(0, Math.floor(total * 2 / 3));
const earlyDefectRate = firstTwoThirds.filter(m => m === "D").length / (firstTwoThirds.length || 1);
const lateDefectRate = lastThird.filter(m => m === "D").length / (lastThird.length || 1);
if (earlyDefectRate < 0.15 && lateDefectRate > 0.85) return "grudger";
// Random signature: defect rate close to 50%, no obvious runs
if (defectRate > 0.35 && defectRate < 0.65) return "random";
// Otherwise assume some form of reciprocal/tit-for-tat-like play
return "titForTat";
}