The cup climbs: easy to hard, deterministic — the shuffle retires with its screen
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
dbfd085493
commit
a5a681f9f2
5 files changed
+47
-57
No files matched your search
+14
-14
@@ -917,22 +917,22 @@ export const leagueOf = lg => LEAGUES[Math.min(LEAGUES.length, Math.max(1, lg |
|
||||
export const leagueOfRung = n => LEAGUES.find(l => n <= l.band[1]) || LEAGUES[LEAGUES.length - 1];
|
||||
|
||||
// The tournament, PER LEAGUE. Same shape CUP_ROUNDS always had (name/band/need) — round one is a
|
||||
// single game so a run opens fast, and the drawn body's pool still scales with `need`
|
||||
// (matchOpponent). The rounds ride ON the cup object (beats.startMatch stamps them), so every
|
||||
// consumer reads cup.rounds and the full-ladder constant is gone.
|
||||
// A league band is 3-4 rungs, so the draw is WITHOUT REPLACEMENT: every non-final round carries
|
||||
// the whole sub-band and the run deals each body at most once (cup.played / buildBracket's used
|
||||
// set), the final is always the band's top rung — "only the finale is settled", still. A 4-rung
|
||||
// league is four rounds (a shuffle of three challengers), a 3-rung league is three.
|
||||
// single game so a run opens fast, and the body's pool still scales with `need` (matchOpponent).
|
||||
// The rounds ride ON the cup object (beats.startMatch stamps them).
|
||||
// EASY TO HARD, DETERMINISTIC (2026-08-29, Oliver: "warum sollten wir noch mischen?"): each round
|
||||
// is exactly one position of the band, ascending, the final the band's top. The shuffle was the
|
||||
// deleted draw screen's ceremony — without the screen it only ever risked pairing the strongest
|
||||
// challenger with the shortest round, inverting the curve the whole game is tuned around. The
|
||||
// setup's league panel is now, incidentally, an exact preview of the tournament order.
|
||||
export const cupRoundsFor = lg => {
|
||||
const [lo, hi] = leagueOf(lg).band;
|
||||
const open = [];
|
||||
for (let r = lo; r < hi; r++) open.push(r);
|
||||
const names = open.length >= 3 ? ['ROUND ONE', 'QUARTER-FINAL', 'SEMI-FINAL']
|
||||
: ['ROUND ONE', 'SEMI-FINAL'];
|
||||
return open.map((_, i) => ({ name: names[i] || 'ROUND ' + (i + 1), band: open.slice(),
|
||||
need: i ? 2 : 1 }))
|
||||
.concat([{ name: 'THE FINAL', band: [hi], need: 2 }]);
|
||||
const names = hi - lo >= 3 ? ['ROUND ONE', 'QUARTER-FINAL', 'SEMI-FINAL']
|
||||
: ['ROUND ONE', 'SEMI-FINAL'];
|
||||
const rounds = [];
|
||||
for (let r = lo; r < hi; r++)
|
||||
rounds.push({ name: names[rounds.length] || 'ROUND ' + (rounds.length + 1),
|
||||
band: [r], need: rounds.length ? 2 : 1 });
|
||||
return rounds.concat([{ name: 'THE FINAL', band: [hi], need: 2 }]);
|
||||
};
|
||||
|
||||
export const TOURS = [
|
||||
|
||||
Reference in new issue
Block a user