Generators FIELD NOTES · 4 MIN READ
Random Colors, Dates, and Teams: Fair Picks by Machine
Random picks done fairly: colors drawn in HSL space, dates as uniform day offsets, teams shuffled then dealt round-robin, with optional seeds for reproducibility.
"Just pick something random" quietly hides three different questions: random in what space, random within which window, and random under which constraint — every team the same size, no day repeated, a usable shade of blue? These three generators answer each question with a little arithmetic and one shared engine.
Random colors: draw in HSL, not RGB
The naive random color — three independent bytes of red, green, blue — is perfectly uniform across all 16.7 million colors, and perceptually terrible: most of the RGB cube is grayish murk, so "uniform" and "useful" are different properties. The better move is to draw where designers think: pick a hue from 0–359, a saturation from 0–100, and a lightness from 0–100, each uniformly, then convert HSL → hex. Same fairness, far better-looking sample — and the tool reports every color in hex, RGB, and HSL at once.
Constraints are what make it practical. Pin the hue to 210 and every draw stays in the blue family; pin the lightness and text contrast stays predictable across the batch. A run with hue locked to 210 produced #ebebeb (a near-white wash) and #263645 (a deep slate) from the same seed — two radically different colors that are both unmistakably blue, which is exactly what constraining one dial buys. Batches run up to 100 colors at a time; for deliberate palettes rather than exploration, the organized approaches are rotating hue around the wheel, as in how color harmonies work, or sliding lightness with the arithmetic in tints and shades explained.
Random dates: one uniform number per day
A random date in a window is really a random integer in disguise. Treat the inclusive range [start, end] as a row of days, draw an offset uniformly from 0 to (span − 1), and add it to the start date. For 2026-01-01 through 2026-12-31 the span is 365 days — 2026 is not a leap year — so offsets run 0–364, and both endpoints are possible picks. Leap days need no special casing, because the underlying calendar arithmetic (real Date math, not counting) does the bookkeeping.
The unique option changes the model: it is drawing without replacement, like dealing cards — a day, once picked, is out of the pool, enforced by redrawing any collision. That is the right choice for picking prize-draw dates or sampling weekdays without duplicates; leaving it off allows repeats, which is what you want when each pick should be independent. Output formats cover ISO (2026-06-13), US and EU numeric orders, and a long "June 13, 2026" form; up to 1,000 dates per run. The statistical underpinning — equal independent chances, and what sampling without replacement means — is laid out in random sampling explained.
Random teams: shuffle, then deal round-robin
Splitting people into teams fairly is two cheap steps. First shuffle the names with an unbiased Fisher–Yates pass, so every ordering of the list is equally likely. Then deal them like cards: person at position i joins team (i mod number-of-teams). Round-robin dealing guarantees team sizes differ by at most one — 10 people, 3 teams gives sizes of 4, 3, 3, never 5, 5, 0 — with no retry loops or fudging:
shuffled: Bo, Eli, Fay, Hal, Dan, Gus, Jo, Ida, Cara, Ana
deal i → team (i mod 2):
Team 1: Bo, Eli, Fay, Hal, Dan
Team 2: Gus, Jo, Ida, Cara, Ana
Two modes cover the two ways people actually ask: teamCount ("make 4 teams") or teamSize ("4 per team", which implies ceil(n/size) teams). Fairness here has a countable meaning: with an unbiased shuffle, every one of the possible rosters gets its fair share of probability. Ten people into two teams of five can be split C(10,5) = 252 ways — the combination arithmetic is in permutations vs combinations — and a fair generator spreads its picks across all of them instead of always leaving the last person with the same crowd.
Seeds: the same pick, on demand
All three tools share one randomness engine and one optional seed. Without a seed, every run is a fresh, unpredictable draw. With a seed, the draw becomes reproducible — same seed, same colors, same dates, same teams — which turns "trust me, it was random" into something anyone can re-verify, useful for sharing results or debugging. The engine is a compact Park–Miller generator, and the tradeoffs between seeded and true randomness are covered properly in how pseudorandom numbers work; for picking colors, dates, and teams, uniformity is what matters, and the seed only decides who can replay the draw.
Try it yourself
The Random Color Generator draws in HSL with optional hue, saturation, and lightness locks, and emits hex, RGB, and HSL per color. The Random Date Generator picks uniformly from any inclusive date window, with a unique option for no repeats and four output formats. The Random Team Generator shuffles and deals any list of names into balanced teams by count or by size — the shuffle-deal pair that makes the fairness guarantee real.