Poseidon vAlpha
Created 9/5/2026
Active
This is improved version of original Poseidon with few small value changes.
Avg score
8.143
Wins
9359
Losses
7491
Win rate
40.5%
Total battles: 23096
Score history
Avg: 8.143
Recent battles
- Poseidon vAlpha 5.93 vs 5.48 Agnes-distill-Tachyon-v2
- Poseidon vAlpha 5.5 vs 5.43 Opportunist v4
- cop7 5.15 vs 4.92 Poseidon vAlpha
- Poseidon vAlpha 7.92 vs 7.19 Adaptative v3.1.1
- defector 5.06 vs 4.92 Poseidon vAlpha
- Poseidon vAlpha 5.35 vs 5.82 tie II
- Poseidon vAlpha 9.7 vs 9.59 goatbotv4.1
- Tieseeeeeeeeeeeeker v2 9.67 vs 9.73 Poseidon vAlpha
- Poseidon vAlpha 9.9 vs 9.9 Apex Tie
- JBot 9.79 vs 9.85 Poseidon vAlpha
- Poseidon vAlpha 9.9 vs 9.9 evil meow limited edition Tie
- Adaptative v3.1.1 7.5 vs 8.15 Poseidon vAlpha
- human test 1 9.83 vs 9.89 Poseidon vAlpha
- hershey bot mentos v3 5.32 vs 5.26 Poseidon vAlpha
- Poseidon vAlpha 9.89 vs 9.89 glitch v2.2 for stag hunt Tie
- goatbotv3.2 9.9 vs 9.9 Poseidon vAlpha Tie
- Poseidon vAlpha 9.78 vs 9.78 goatbotv4.1 Tie
- Poseidon vAlpha 9.07 vs 5.79 test(1.2)
- Poseidon vAlpha 9.89 vs 9.89 Agnes-distill-Tachyon-v3 Tie
- Poseidon vAlpha 4.89 vs 5.08 Test2
- Poseidon vAlpha 6.55 vs 4.33 ThisIsRandom
- kind detective 9.57 vs 9.57 Poseidon vAlpha Tie
- Poseidon vAlpha 8.59 vs 8.55 JBot
- Poseidon vAlpha 9.89 vs 9.89 apex predator v4 Tie
- Firstborn v3.2 5.13 vs 4.82 Poseidon vAlpha
- human test 1 9.11 vs 9.42 Poseidon vAlpha
- Poseidon vAlpha 7.83 vs 8.13 Defender 3.0v
- Lagged Punisher 9.64 vs 9.76 Poseidon vAlpha
- Poseidon vAlpha 9.55 vs 9.49 Aura67
- Poseidon vAlpha 8.19 vs 5.48 detective grudger v1
- Poseidon vAlpha 8 vs 1 copycat
- Poseidon vAlpha 5.9 vs 5.47 Tachyon-v1
- Defect Half v2 5.65 vs 7.21 Poseidon vAlpha
- Poseidon vAlpha 4.9 vs 5.07 Always Defect
- Sherlock Holmes 9.6 vs 9.6 Poseidon vAlpha Tie
- BeeBot2 8.4 vs 8.4 Poseidon vAlpha Tie
- DR MUNDO v0.3 9.89 vs 9.89 Poseidon vAlpha Tie
- Poseidon vAlpha 9.9 vs 9.9 Not my bot Tie
- Poseidon vAlpha 5.02 vs 5.51 2 Tit for Tat (4)
- Poseidon vAlpha 9.52 vs 9.4 greedy tic tacs
- Poseidon vAlpha 6.31 vs 5.54 big GRIM guy
- Poseidon 9.9 vs 9.9 Poseidon vAlpha Tie
- Poseidon vAlpha 8.61 vs 8.54 greedy tic tacs
- Poseidon vAlpha 9.08 vs 5.86 Always Cooperate
- Bot 1 9.89 vs 9.89 Poseidon vAlpha Tie
- Forgiver 9.96 vs 9.82 Poseidon vAlpha
- Poseidon vAlpha 9.89 vs 9.89 tft bot Tie
- Poseidon vAlpha 4.89 vs 5.08 Always Defect
- always defect 5.08 vs 4.89 Poseidon vAlpha
- JustBeatIt V4 9.89 vs 9.89 Poseidon vAlpha 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,
};
//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;
}