Skip to main content

Adaptive Draw

Overview

An Adaptive draw combines the multi-structure topology of a Compass draw with the flexible sizing of a Lucky Draw. Where Compass requires power-of-2 draw sizes, Adaptive supports any participant count (e.g., 11, 18, 22) across a full direction cascade.

In the factory, this draw type is represented by the constant ADAPTIVE.

How It Works

Each structure in an Adaptive draw uses lucky draw logic internally. This means:

  • Non-power-of-2 structures have "pre-feed rounds" where one loser is retained as a lucky loser for the next round
  • The remaining losers from each round flow to child structures via LOSER links
  • Child structure sizes are computed from actual round profiles, not simple halving

Structure

Like Compass, Adaptive generates up to eight structures named after compass directions:

StructureAbbreviationReceives losers from
EastEMain draw (starting structure)
WestWEast Round 1 losers
NorthNEast Round 2 losers
SouthSWest Round 1 losers
NortheastNEEast Round 3 losers
NorthwestNWNorth Round 1 losers
SouthwestSWWest Round 1 losers
SoutheastSESouth Round 1 losers

Child Size Computation

For a non-power-of-2 draw size, child sizes depend on the round profile:

  • Pre-feed round (odd matchUp count): childSize = matchUpsCount - 1 (one loser stays as lucky loser)
  • Non-pre-feed round: childSize = matchUpsCount (all losers exit)
  • Child structures with fewer than 2 participants are suppressed

Example -- drawSize 11:

The lucky draw round profiles for 11 participants produce rounds with 6, 3, 2, 1 matchUps:

  • Round 1 (6 matchUps, pre-feed): child drawSize = 5 -> West
  • Round 2 (3 matchUps, pre-feed): child drawSize = 2 -> North
  • Round 3 (2 matchUps): child drawSize = 2 -> Northeast
  • Round 4 (final): no child

West (drawSize 5) recursively generates its own children (South, etc.).

Configurable Depth

The roundOffsetLimit parameter controls how many levels of child structures are generated:

roundOffsetLimitStructuresEquivalent to
12--
2up to 4OLYMPIC-like
3 (default)up to 8COMPASS-like

Adaptive Attributes

The factory defines adaptive structure attributes in the ADAPTIVE_ATTRIBUTES constant, identical to COMPASS_ATTRIBUTES:

ADAPTIVE_ATTRIBUTES = {
0: { name: 'East', abbreviation: 'E' },
'0-1': { name: 'West', abbreviation: 'W' },
'0-2': { name: 'North', abbreviation: 'N' },
'0-3': { name: 'Northeast', abbreviation: 'NE' },
'0-1-1': { name: 'South', abbreviation: 'S' },
'0-1-2': { name: 'Southwest', abbreviation: 'SW' },
'0-2-1': { name: 'Northwest', abbreviation: 'NW' },
'0-1-1-1': { name: 'Southeast', abbreviation: 'SE' },
};

Custom naming can be provided via playoffAttributes.

Differences from Compass

FeatureCompassAdaptive
Draw sizePower-of-2 onlyAny size >= 5 (or power-of-2)
Structure internalsStandard eliminationLucky draw elimination
Child size computationdrawSize / 2^NFrom round profiles
Lucky loser mechanismNonePre-feed rounds retain 1

Generation

const { drawDefinition } = engine.generateDrawDefinition({
drawType: 'ADAPTIVE',
drawSize: 11,
});

// With custom depth (OLYMPIC-like, 4 structures max)
const { drawDefinition } = engine.generateDrawDefinition({
drawType: 'ADAPTIVE',
roundOffsetLimit: 2,
drawSize: 11,
});

Use Cases

  • Tournaments with non-standard participant counts that want compass-style guaranteed matchUps
  • Any scenario where compass topology is desired but participant count is not a power of 2
  • Flexible club and junior tournaments where exact bracket sizes vary