Follow Yokosawa hand range rules for 3-bets and BB defense in reviews
When the hero's own raise is re-raised, a hand in the same color as the re-raiser's estimated range is now a call (raise still needs two above). In the BB facing a single open of up to 4BB, the hero now defends wider: blue or better (white vs CO, purple frame vs BTN, one below the opener) calls, and three above raises. Opponent range estimates follow the same rules. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
0318ee2b5e
commit
d89ce1dd30
3 files changed
+121
-15
No files matched your search
@@ -135,6 +135,73 @@ test('プリフロップ: 前に参加者がいたら、その人の色の一つ
|
||||
assert.equal(j.verdict, 'good');
|
||||
});
|
||||
|
||||
test('プリフロップ: 自分のレイズにリレイズされたら、相手と同じ色でもコールできる', () => {
|
||||
// 6人: UTG(hero、後ろに5人 → 緑)がオープン、HJ が3bet(緑の二つ上 → 赤と推定)、ほかは降りて hero に戻る
|
||||
for (const [cards, action, verdict] of [
|
||||
[['Jh', 'Jd'], 'call', 'good'], // 赤 = 同じ → コール
|
||||
[['Jh', 'Jd'], 'fold', 'tight'],
|
||||
[['Kh', 'Qd'], 'call', 'loose'], // 黄 = 一つ下 → フォールド
|
||||
[['Kh', 'Qd'], 'fold', 'good'],
|
||||
[['Ah', 'Ad'], 'call', 'good'], // 紺 = 一つ上 → コール(二つ上はない)
|
||||
]) {
|
||||
const t = makeTable(6);
|
||||
const hero = act(t, 'raise', 30);
|
||||
const hj = act(t, 'raise', 90);
|
||||
for (let k = 0; k < 4; k++) act(t, 'fold');
|
||||
assert.equal(t.hand.toAct, hero);
|
||||
act(t, action);
|
||||
give(t, hero, cards);
|
||||
const { judgments, estimated } = judgePreflop(t.hand, hero);
|
||||
assert.equal(estimated.get(hj), 6);
|
||||
const j = judgments[1];
|
||||
assert.equal(j.situation.rule, 'reraised');
|
||||
assert.equal(j.verdict, verdict, `${cards} ${action}`);
|
||||
}
|
||||
});
|
||||
|
||||
test('プリフロップ: BB は 4BB までのオープンに広くコールし、三つ上でレイズ', () => {
|
||||
// 6人: CO(後ろに3人 → 青)がオープンして BB(hero)まで降りる。白以上でコール、赤以上でレイズ
|
||||
const coOpen = (to, cards, action) => {
|
||||
const t = makeTable(6);
|
||||
act(t, 'fold');
|
||||
act(t, 'fold');
|
||||
act(t, 'raise', to);
|
||||
act(t, 'fold');
|
||||
act(t, 'fold');
|
||||
const bb = t.hand.toAct;
|
||||
assert.equal(bb, t.hand.bbSeat);
|
||||
act(t, action, action === 'raise' ? to * 3 : 0);
|
||||
give(t, bb, cards);
|
||||
return judgePreflop(t.hand, bb).judgments[0];
|
||||
};
|
||||
for (const [cards, action, verdict] of [
|
||||
[['Kh', '8h'], 'call', 'good'], // 白 = 青の一つ下 → コール
|
||||
[['Qh', '5h'], 'call', 'loose'], // 紫枠 → フォールド
|
||||
[['Kh', 'Qd'], 'call', 'good'], // 黄 = 二つ上 → まだコール
|
||||
[['Kh', 'Qd'], 'raise', 'aggressive'],
|
||||
[['Jh', 'Jd'], 'raise', 'good'], // 赤 = 三つ上 → レイズ
|
||||
]) {
|
||||
const j = coOpen(30, cards, action);
|
||||
assert.equal(j.situation.rule, 'bb');
|
||||
assert.equal(j.verdict, verdict, `${cards} ${action}`);
|
||||
}
|
||||
// 4BB を超えるオープンには、ほかの席と同じく一つ上が必要
|
||||
const big = coOpen(50, ['Kh', '8h'], 'call');
|
||||
assert.equal(big.situation.rule, 'normal');
|
||||
assert.equal(big.verdict, 'loose');
|
||||
|
||||
// BTN(後ろに2人 → 白)のオープンには紫枠からコールできる。コールした BB のレンジも紫枠と推定する
|
||||
const t = makeTable(6);
|
||||
for (let k = 0; k < 3; k++) act(t, 'fold');
|
||||
act(t, 'raise', 25);
|
||||
act(t, 'fold');
|
||||
const bb = act(t, 'call');
|
||||
give(t, bb, ['Qh', '5h']);
|
||||
const { judgments, estimated } = judgePreflop(t.hand, bb);
|
||||
assert.equal(judgments[0].verdict, 'good');
|
||||
assert.equal(estimated.get(bb), 1);
|
||||
});
|
||||
|
||||
test('オールインの期待値: AA 対 KK はおよそ 82%', () => {
|
||||
const hands = new Map([
|
||||
[0, ['As', 'Ad']],
|
||||
|
||||
Reference in new issue
Block a user