How the 0–100 Board Score Is Calculated
Every board shown with Balanced resources on is the highest-scoring of 30 candidates. This page gives the four penalties with their exact weights and the selection loop, then rebuilds one board’s score from the numbers the tool prints.
The score in one formula
Every board starts at 100 and loses points for four measurable defects. The result is clamped to 0–100 and rounded to a whole number. The function is analyze() in src/app.js:
score = round( clamp( 100 − 18×red − 4×same − 150×dev − 0.6×spread, 0, 100 ) )
| Term | What is counted | Weight | On a default board |
|---|---|---|---|
| red | Adjacent hex pairs where both numbers are 6 or 8 | −18 per pair | 0 while the no-adjacent-6/8 rule holds |
| same | Adjacent hex pairs of the same terrain, desert excluded | −4 per pair | 0–9 pairs on 3–4 players (14 on 5–6) while the resource rule holds: one same-resource neighbour per hex |
| dev | The largest gap between a resource’s share of the board’s pips and its share of the non-desert hexes | −150 × dev; one percentage point costs 1.5 | Usually ≤7 percentage points (≤10.5 points): the rule rejects more skew, up to the retry cap below |
| spread | Pips at the best intersection minus pips at the sixth-best marked intersection | −0.6 per pip | Board-dependent; 4 pips in the worked example |
One touching 6/8 pair costs as much as 4.5 same-resource pairs, so adjacent red numbers are the defect the formula punishes hardest. The label next to the score comes from the same script: 85–100 Excellent, 70–84 Good, 55–69 Fair, under 55 Unbalanced.
Measured over 4,000 generated 3-4 player boards: median 75, 90th percentile 82, and 85+ about one board in twenty. The label is a band, not a percentile — most rule-compliant boards land in the 70s, and a board only reaches Excellent when every rule holds and the six start spots are close together.
Worked example: the best of 30 candidates for seed method-demo
method-demo · 3-4 players · rules 1101 · score 86/100 (Excellent) · open this boardGenerated 2026-11-01 by
src/app.js; board drawn by build.py.Rules code 1101 = no adjacent 6 & 8 on, no same numbers touching on, no 2 & 12 touching off, balanced resources on. The link in the caption reloads this exact board.
Under the score, the tool prints the inputs it used — this is that line on this board:
Red 6/8 touching: 0 · same-resource pairs: 2 · max pip skew: 2.3% · best start spots: 13, 12, 11, 11, 10, 9 pips
| Term | Value on this board | Points |
|---|---|---|
| red | 0 touching 6/8 pairs | 0 |
| same | 2 same-resource pairs | −8 |
| dev | 2.30 percentage points: brick holds 11 of the 58 pips (19.0%) against a 16.7% hex share. The tool prints 2.3%. | −3.45 |
| spread | 13 pips at the best start, 9 at the sixth | −2.4 |
| Score | 100 − 8 − 3.45 − 2.4 = 86.15 | 86 |
The six marked intersections, in the order the tool numbers them. No two of them share more than one hex — that is how the list is chosen.
| Mark | Intersection | Pips | Different resources |
|---|---|---|---|
| 1 | Brick 9 · Wood 8 · Brick 5 | 13 | 2 |
| 2 | Brick 5 · Sheep 4 · Wheat 8 | 12 | 3 |
| 3 | Ore 6 · Sheep 3 · Wheat 5 | 11 | 3 |
| 4 | Wood 8 · Brick 10 · Sheep 4 | 11 | 3 |
| 5 | Sheep 11 · Wood 4 · Wood 8 | 10 | 2 |
| 6 | Wheat 5 · Wood 11 · Ore 10 | 9 | 3 |
How the 30 candidates are generated and picked
- A click makes 30 boards. The page takes the base seed (typed, or six random characters) and generates candidate 0 from it, candidate 1 from
seed#1, and so on up toseed#29. - Each candidate must pass your rules. Terrain is shuffled and rejected when a hex touches more than one hex of its own terrain (with Balanced resources on). Number tokens are shuffled onto the 18 or 28 number hexes and rejected when two 6/8 touch, when equal numbers touch, when two 2/12 touch (each only if that rule is on), or when any resource’s pip share is more than 7 percentage points from its hex share (with Balanced resources on). The loops give up after 5,000 terrain and 20,000 number attempts and keep the last layout, so a seed that cannot satisfy a rule can slip through.
- Every surviving candidate is scored with the four-term formula.
- The highest score wins. The comparison is strict, so a tie keeps the earlier candidate: on this seed #23 and #28 both score 85, and neither is the winner because #4 scores 86.
The rule switches are part of the random seed (seed + "|" + player count + "|" + rule settings), so changing one rule reshuffles all 30 candidates instead of filtering the same set. The candidate count is conditional too: with Balanced resources off, the page generates a single board and this loop never runs, which is why unchecking that rule can drop the score sharply.
The share URL stores only the base seed, the player count and the four switches. Opening it regenerates the board: with Balanced resources on, all 30 candidates are rerun and the same winner comes back; the 29 other boards are not kept.
All 30 scores for this seed, in generation order. The highlighted cell is the winner; #23 and #28 tie at 85 behind it.
| #0 | #1 | #2 | #3 | #4 | #5 | #6 | #7 | #8 | #9 |
|---|---|---|---|---|---|---|---|---|---|
| 67 | 77 | 78 | 76 | 86 | 81 | 77 | 71 | 74 | 68 |
| #10 | #11 | #12 | #13 | #14 | #15 | #16 | #17 | #18 | #19 |
|---|---|---|---|---|---|---|---|---|---|
| 82 | 71 | 82 | 80 | 75 | 79 | 81 | 74 | 68 | 78 |
| #20 | #21 | #22 | #23 | #24 | #25 | #26 | #27 | #28 | #29 |
|---|---|---|---|---|---|---|---|---|---|
| 74 | 75 | 79 | 85 | 76 | 75 | 82 | 75 | 85 | 70 |
Lowest 67 · median 76 · highest 86. Candidate #0 — the board a single-shot generator would have shown — scored 67. On this seed the selection step is worth 19 points, and the candidate you see is not the first one that passed the rules.
What the score does not measure
- Harbors. Ports are shuffled and drawn, but no scoring term reads them. A board with a 2:1 harbor on your resource scores the same as one without.
- Access. Pips are counted per resource across the whole board. The score never asks whether a legal intersection reaches the high-pip hex, or who can claim it.
- Number diversity inside a start. Diversity is a tie-breaker when the six starts are ranked (a three-resource spot beats a two-resource spot with the same pips); it does not enter the score.
- The other skews.
devis the single worst resource, not the mean or the sum: a board with one 7-point outlier and a board with a 7-point plus a 6-point outlier both lose 10.5 points. - Anything after setup. The robber’s later moves, the harbors you take, cities, development cards and scenario rules are outside the formula.
The other half of reading a board is in how the per-resource pip totals work; the odds behind the pips are on the dice probability chart, and the rule list is on balanced board rules.
Questions
Why did the same seed give me a different board after I changed a rule?
The four rule switches are part of the string that seeds the random generator: seed, player count and the rule settings. Turning one off produces a different sequence for every one of the 30 candidates, not a filtered copy of the previous 30.
What does the tool print besides the score?
The line under the score carries the inputs for all four penalties: red 6/8 pairs, same-resource pairs, the largest pip skew to one decimal, and the six best start values (the first minus the sixth is the spread). The score is those inputs put through the formula, rounded.
Can a board score 100?
The score is rounded, so 100 needs the four penalties to total 0.5 or less. A fair share is rarely a whole number of pips (4/18 of 58 is 12.89), so some rounding skew almost always remains; 85 and up is the practical top band.
Is 30 candidates a tuned number?
No. The count is fixed in the script: 30 when Balanced resources is on, 1 when it is off. It is the number of boards one click generates, not a measured optimum.
Next step → See how resource pips work
Updated 2026-11-01 · about & methodology
More tools & guides
Classic 19-hex balanced map5-6 player generator
30-hex extension layoutBalanced board rules
How fair boards are builtDice probability chart
Odds & pips for 2-12How to set up a board
Variable setup stepsIsland & seafaring ideas
Custom scenario inspirationBest starting positions
Pick opening spots by pipsTiles & number tokens
Full component countsRandom board odds
Why 69% of shuffles break 6 & 8Board score method
The 0–100 formula & candidate pickResource pips explained
Read scarcity from the totalsRandom board odds
68.9% break the 6 & 8 rule
Don’t own the game yet?
HexBoardGen works with the base game and the 5-6 player extension. Check prices on Amazon.
Get new board modes first
One email when we add a new generator mode or guide. No spam.