Poseidon
Created 9/5/2026
Active
Farms the weak, Starves the bullies, and Negotiates perfect peace with deserving.
Avg score
8.559
Wins
5718
Losses
8665
Win rate
24.2%
Total battles: 23646
Score history
Avg: 8.559
Recent battles
- Poseidon 5.67 vs 5.16 Bumwinnah4
- BeeBot2 9.98 vs 9.93 Poseidon
- mahad kay 5.12 vs 4.84 Poseidon
- Poseidon 9.9 vs 9.9 the tuff copier Tie
- Poseidon 6.12 vs 4.09 random5050
- Poseidon 9.89 vs 9.89 IDK Bot Tie
- Poseidon 6.31 vs 5.69 Adaptative v3.1.1
- big GRIM guy 5.57 vs 6.07 Poseidon
- Poseidon 4.88 vs 5.13 kind but faster detective
- tieseeker v5 9.9 vs 9.9 Poseidon Tie
- Poseidon 7.9 vs 2.59 detective grudger v1
- Tuff9 9.92 vs 9.92 Poseidon Tie
- Poseidon 5.1 vs 5.51 knight
- ٠new X 9.82 vs 9.88 Poseidon
- Poseidon 9.92 vs 9.92 apex predator v5 Tie
- detective grudger v1 9.08 vs 8.96 Poseidon
- Poseidon 6.64 vs 6.07 Adaptative v3.1.1
- Poseidon 9.86 vs 9.86 bigger memory Tie
- mahoraga v2 5.13 vs 4.82 Poseidon
- Poseidon 5.1 vs 5.51 Destroyer
- Lee Wrangler 9.25 vs 9.19 Poseidon
- Poseidon 9.9 vs 9.9 Královecký kraj Tie
- Poseidon 8.53 vs 9.21 Swimmingbot2
- Tit for Two Tats 5.81 vs 9.07 Poseidon
- DR MUNDO v0.2 9.91 vs 9.91 Poseidon Tie
- better 9.91 vs 9.91 Poseidon Tie
- FirstBot 9.98 vs 9.91 Poseidon
- Zeus 2 9.89 vs 9.89 Poseidon Tie
- Poseidon 9.87 vs 9.8 adaptative v2.1
- Poseidon 9.91 vs 9.91 the tuff copier Tie
- Poseidon 9.9 vs 9.9 Poseidon vAlpha Tie
- Poseidon 7.68 vs 1.33 Reverse Tit for Tat
- Castifier 2.0v 8.53 vs 8.53 Poseidon Tie
- SuperBASIC 5.8 vs 9.07 Poseidon
- Czechias imperium 5.41 vs 5.08 Poseidon
- Dilemma-Bot-Hackclub 9.94 vs 9.94 Poseidon Tie
- Better-Tuff8 9.9 vs 9.9 Poseidon Tie
- Poseidon 9.94 vs 9.94 Veritasium Tie
- Poseidon 5.08 vs 5.44 Grudger
- Poseidon 9.9 vs 9.9 goatbotv3.1 Tie
- Poseidon 4.99 vs 5.26 cop5
- bigger memory 9.91 vs 9.91 Poseidon Tie
- Poseidon 9.94 vs 9.94 evil meow v2 Tie
- The Ultimate Bot v3 9.9 vs 9.9 Poseidon Tie
- JBot 9.91 vs 9.91 Poseidon Tie
- Poseidon 9.9 vs 9.9 Redgux Tie
- Poseidon 9.9 vs 9.9 Abdullah Ezzat Tie
- Dilemma-Bot-Hackclub 9.9 vs 9.9 Poseidon Tie
- Poseidon 9.78 vs 9.78 Harvest V3 MAX Tie
- OmegaTitForTat 9.9 vs 9.9 Poseidon Tie
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,
};
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 5 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 < 5) return ["C", 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;
}
}
}
//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 = [4, 15, 35];
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;
}