Not my bot
Created 9/14/2026
Active
jj
Avg score
8.350
Wins
3979
Losses
3091
Win rate
40.1%
Total battles: 9917
Score history
Avg: 8.350
Recent battles
- Always Defect 5.09 vs 4.88 Not my bot
- Not my bot 5.74 vs 4.36 take a fuckin' guess
- Not my bot 9.04 vs 5.69 Reactant V3.2
- Not my bot 6.38 vs 3.11 test 1e
- Not my bot 9.19 vs 9.14 Oliver 2
- SuperBASIC 5.83 vs 9.07 Not my bot
- the thinker 9.69 vs 9.63 Not my bot
- Not my bot 6.5 vs 3.07 FlippityFloppity v3
- Not my bot 8.07 vs 7.39 Adaptative v3.1.1
- test 1c 8.14 vs 8.14 Not my bot Tie
- bigger memory 8.88 vs 9.08 Not my bot
- tft bot 9.91 vs 9.91 Not my bot Tie
- jingolfika 8.94 vs 9.08 Not my bot
- Not my bot 8.72 vs 8.96 something
- copycat 1 vs 8 Not my bot
- lift yourself v1.0.1 5.2 vs 4.83 Not my bot
- Not my bot 8.68 vs 5.66 Reactant V3.5.1
- Not my bot 9.9 vs 9.9 Oliver 2 Tie
- Not my bot 9.9 vs 9.9 GenerousTitForTat Tie
- Not my bot 9.78 vs 9.78 Harvest V3 MAX Tie
- Not my bot 4.88 vs 5.09 Always Defect
- BeeBot2 9.75 vs 9.75 Not my bot Tie
- Opportunist v3 5.94 vs 5.52 Not my bot
- Not my bot 9.9 vs 9.9 Lagged Punisher Tie
- OmegaTFT 9.9 vs 9.9 Not my bot Tie
- Not my bot 9.92 vs 9.98 BeeBot2
- Not my bot 4.98 vs 5.08 Mark 5
- Bumwinnah2 4.17 vs 7.16 Not my bot
- Tuff9 9.91 vs 9.91 Not my bot Tie
- Not my bot 9.31 vs 9.26 tit for tat
- Not my bot 9.9 vs 9.9 Abdullah Ezzat Tie
- Poseidon vAlpha 9.9 vs 9.9 Not my bot Tie
- Mark3 5.15 vs 4.89 Not my bot
- DR MUNDO v0.3 9.36 vs 9.47 Not my bot
- Not my bot 9.07 vs 5.82 Reactant V3.2
- Not my bot 8.19 vs 8.19 BeeBot3 Tie
- Columbus 1.2 vs 7.8 Not my bot
- JustBeatIt V7 9.57 vs 9.74 Not my bot
- human test 1 9.89 vs 9.89 Not my bot Tie
- evil tic tacs 9.6 vs 9.6 Not my bot Tie
- Not my bot 9.9 vs 9.9 Královecký kraj Tie
- Not my bot 5.43 vs 5.37 Opportunist v4
- Veritasium 9.9 vs 9.9 Not my bot Tie
- ٠new X 9.83 vs 9.89 Not my bot
- Not my bot 6.47 vs 4.52 adaptive bot
- Not my bot 9.65 vs 9.43 BIUN V3
- Forgiving Destroyer 9.89 vs 9.89 Not my bot Tie
- goatbotv3.1 9.89 vs 9.89 Not my bot Tie
- Not my bot 9.9 vs 9.9 apex predator v5 Tie
- something 8.92 vs 8.67 Not my bot
Source
export default function bot({ history = [], memory }) {
try {
const t = history.length;
const mem = memory ?? {
olivesSent: 0,
dStreak: 0,
probed: false,
armed: false,
siphoning: false,
};
//everything is fair in love and war
if (t >= 118) return ["D", mem];
if (t === 0) return ["C", mem];
const last =history[t - 1];
const prev = t >=2 ? history[t - 2] : null;
mem.dStreak = (last.you === "D" && last.opponent === "D") ? mem.dStreak + 1 : 0;
// bot gives D up to 3 rounds to see if opponent is conditional
const allOurMovesC = history.every(r => r.you === "C");
if (history[0].opponent === "D" && allOurMovesC) {
if(last.opponent === "C" || t < 3) return ["C", mem];
}
//inspiration 001
const firstD = history.findIndex(r => r.opponent === "D");
if (firstD !== -1 && (t - firstD >= 4)) {
const neverForgave = history.slice(firstD).every(r => r.opponent === "D");
if (neverForgave) return ["D", mem];
}
//to shut down alternat moves exploit bot :/
if (t >= 14 && isRigidPattern(history)) {
return ["D", mem];
}
//round 7 to see TF2T & other nice and simple bots :|
const oppEverD = history.some(r => r.opponent === "D");
if (t === 7 && !oppEverD && !mem.probed) {
mem.probed = true;
return ["D", mem];
}
//Lets see feedback :)
if (mem.probed && !mem.armed && !mem.siphoning) {
if (t === 8) {
return ["C", mem];
}
if (t === 9) {
if (last.opponent === "D") {
mem.armed = true;
}else {
mem.siphoning = true;
}
return ["C", mem];
}
}
//some harvesting system :@
if (mem.siphoning) {
if (last.opponent === "D") {
mem.siphoning = false;
return ["C", mem];
}
return [t % 2 === 0 ? "D" : "C", mem];
}
if (!oppEverD) return ["C", mem];
const { pC, pD, samplesAfterD } = getRecentState(history, 12);
const oppDRate = history.filter(r => r.opponent === "D").length / t;
//nasty play i defect if they never punish D :#
if (samplesAfterD >= 3 && pD >= 0.45 && oppDRate < 0.35) {
return ["D", mem];
}
//coop with tit for tat bots
if (pC >= 0.6) {
const weProvokedThem = last.opponent === "D" && prev?.you === "D";
if (last.opponent === "D" && !weProvokedThem) return ["D", mem];
return ["C", mem];
}
const ladder = [2, 5, 10, 20];
const oppEverC = history.some(r => r.opponent === "C");
if (oppEverC && mem.olivesSent < ladder.length && mem.dStreak >= ladder[mem.olivesSent]) {
mem.olivesSent++;
return ["C", mem];
}
return ["D", mem];
} catch {
return ["D", null];
}
}
function getRecentState(history, windowSize) {
let cAfterC = 0, nC = 0;
let cAfterD = 0, nD = 0;
const start = Math.max(1, history.length - windowSize);
for (let i = start; i < history.length; i++) {
const myPrev = history[i - 1].you;
const theirMove = history[i].opponent;
if (myPrev === "C") {
nC++;
if (theirMove === "C") cAfterC++;
} else {
nD++;
if (theirMove === "C") cAfterD++;
}
}
return {
pC: (cAfterC + 0.5) / (nC + 1),
pD: (cAfterD + 0.5) / (nD + 1),
samplesAfterD: nD,
};
}
function isRigidPattern(history) {
const window = history.slice(-20);
const moves = window.map(r => r.opponent);
if (!moves.includes("C") || !moves.includes("D")) return false;
for (let span = 2; span <= 6; span++) {
let periodic = true;
for (let i = span; i < moves.length; i++) {
if (moves[i] !== moves[i - span]) {
periodic = false;
break;
}
}
if (periodic) {
const isEchoingUs = window.slice(1).every((r, idx) => r.opponent === window[idx].you);
if (!isEchoingUs) return true;
}
}
return false;
}