raju
Created 9/3/2026
Active
raju the goat always wins
Avg score
7.582
Wins
11915
Losses
13829
Win rate
39.6%
Total battles: 30111
Score history
Avg: 7.582
Recent battles
- raju 4.96 vs 7.27 OmegaTFT
- raju 9.19 vs 9.13 The Ultimate Bot v3
- raju 8.95 vs 9.09 IDK Bot
- raju 9.08 vs 8.95 ApexUltimate v4
- Better-Tuff8 8.34 vs 8.34 raju Tie
- random5050 6.84 vs 6.36 raju
- raju 8.03 vs 7.92 Bumwinnah4
- Zeus 2 8.24 vs 8.24 raju Tie
- raju 4.91 vs 6.9 playing.to.win
- raju 8.98 vs 7.59 Agnes-distill-Tachyon-v2
- neuralAdapter V1 5.57 vs 6.84 raju
- evil meow v2 8.91 vs 8.91 raju Tie
- raju 8.06 vs 7.94 WILLIAM SMITH
- test(1.2) 9.15 vs 9.36 raju
- raju 7.81 vs 7.85 Bumwinnah4
- raju 9.07 vs 9.07 Oliver 2 Tie
- cop until 2 defect 9.09 vs 9.46 raju
- Firstborn v3.2 5.1 vs 4.87 raju
- raju 8.73 vs 8.66 JustBeatIt V5
- Test123 5.15 vs 4.8 raju
- Harvest V3 MAX 7.99 vs 7.85 raju
- raju 4.91 vs 6.9 Test
- raju 4.9 vs 6.57 Destroyer
- llama(1.6) 9.13 vs 9.36 raju
- zyxl bot 5.14 vs 4.81 raju
- Zemra 2 8.48 vs 8.48 raju Tie
- big grim guy 6.66 vs 4.9 raju
- Redgux 9.49 vs 9.49 raju Tie
- raju 8.76 vs 8.76 MoveStealer v2 Tie
- test(1.2) 9.15 vs 9.46 raju
- Bumwinnah 5.31 vs 5.21 raju
- AaravC Bot 1 5.55 vs 5.27 raju
- Sherlock Holmes 9.13 vs 9.06 raju
- raju 8.19 vs 8.33 Lee Wrangler
- FirstBot 5.17 vs 4.75 raju
- raju 8.24 vs 8.24 Sherlock Holmes Tie
- Defected_Boy111 8.89 vs 8.95 raju
- Defected_Boy111 9.21 vs 9.21 raju Tie
- Pls work! 9.12 vs 9.37 raju
- evil meow v2 8.75 vs 8.89 raju
- raju 5.19 vs 5.31 JBot-2
- Reverse Tit for Tat 1.81 vs 7.64 raju
- raju 5.23 vs 5.29 Swimmingbot1v3
- Always cooperates 4.23 vs 8.72 raju
- raju 6.18 vs 6.5 random5050
- 3Blue1Brown 8.91 vs 8.91 raju Tie
- raju 6.62 vs 7.79 2 Tit for Tat (4)
- AcyclicTitForTat 2.45 vs 7.48 raju
- raju 4.84 vs 5.12 Unintended Defection bot
- Swimmingbot2 6.85 vs 6.18 raju
Source
// MAXIMUM BEST BOT
// Strategy: classify the opponent's behavior pattern, then pick the
// counter-strategy that scores best against that specific pattern.
//
// - vs bots that (almost) always cooperate -> exploit hard (mostly defect)
// - vs bots that (almost) always defect -> defect back, cut losses
// - vs random-ish bots -> defect (higher EV than cooperating)
// - vs reactive bots (tit-for-tat-like) -> cooperate, forgive slips
// - vs grudgers (punish forever after 1 D) -> never defect first, stay clean
// - unclear / early game -> generous tit-for-tat
export default function bot({ history, memory }) {
memory = memory ?? {
probeRound: null, // round index where we last threw an exploit probe
}
const round = history.length
// --- First move: always cooperate to open the door for trust ---
if (round === 0) return ["C", memory]
const lastOpp = history.at(-1).opponent
// --- Early game: plain generous tit-for-tat while we gather data.
// Widened from 10 -> 25 rounds: a "reactive" read off <10 points was
// noise, not signal, and locked us out of exploiting a real pushover. ---
if (round < 25) {
const forgive = lastOpp === "D" && Math.random() < 0.15
return [lastOpp === "D" && !forgive ? "D" : "C", memory]
}
// --- Stats over full history ---
const oppDefects = history.filter(m => m.opponent === "D").length
const oppDefectRate = oppDefects / round
// Grudger signature: after our first defection, does opponent basically
// never cooperate again?
const firstOurDefectIdx = history.findIndex(m => m.you === "D")
let grudgerLike = false
if (firstOurDefectIdx !== -1 && firstOurDefectIdx < round - 5) {
const after = history.slice(firstOurDefectIdx + 1)
const defectsAfter = after.filter(m => m.opponent === "D").length
grudgerLike = defectsAfter / after.length > 0.9
}
// Reactive signature: correlate opponent's move with OUR previous move,
// using only the LAST 30 rounds (sliding window) so a stale or lucky
// early read can't lock us in forever, and require a real sample size.
const windowStart = Math.max(1, history.length - 30)
let matches = 0
let checked = 0
for (let i = windowStart; i < history.length; i++) {
const ourPrev = history[i - 1].you
const oppNow = history[i].opponent
checked++
if (ourPrev === oppNow) matches++
}
const reactivity = checked >= 15 ? matches / checked : 0.5 // not enough data => don't trust it
// --- Classification & response ---
// 1) Near-total cooperator: exploit, but not 100% of the time
if (oppDefectRate < 0.05) {
return [round % 5 === 0 ? "C" : "D", memory]
}
// 2) Near-total defector: minimize damage, don't get exploited
if (oppDefectRate > 0.6) {
return ["D", memory]
}
// 3) Grudger-like: never poke the bear
if (grudgerLike) {
return ["C", memory]
}
// 4) Reactive/tit-for-tat-like with a decent-sized sample: cooperate,
// forgive occasional defections, but periodically probe (every ~40
// rounds) with a single defection to check whether the "reactive" read
// is still accurate and whether exploitation has become safe (e.g. a
// bot that's actually soft and stopped punishing). If the probe gets
// punished, we're back to normal next round via lastOpp handling above.
if (checked >= 15 && reactivity > 0.7) {
const dueForProbe =
memory.probeRound === null || round - memory.probeRound >= 40
if (dueForProbe && lastOpp !== "D") {
memory.probeRound = round
return ["D", memory]
}
const forgive = lastOpp === "D" && Math.random() < 0.2
return [lastOpp === "D" && !forgive ? "D" : "C", memory]
}
// 5) Roughly random / unclear pattern: defect has higher expected value
if (checked >= 15 && reactivity < 0.3) {
return ["D", memory]
// 6) Default fallback: generous tit-for-tat
}
const forgive = lastOpp === "D" && Math.random() < 0.15
return [lastOpp === "D" && !forgive ? "D" : "C", memory]
}