Random Choice Generator – Pick From Any List Without Bias
Some decisions do not deserve another twenty minutes of debate. Paste your options into the Random Choice Generator, press Pick, and get an answer that nobody in the room can argue with — what to eat, which task to start, who presents first, which of three offers to shortlist. The same tool doubles as an unbiased picker for classrooms, standups, giveaways and playtesting, and it shows its working so the result is verifiable instead of a black box.
How the Draw Works
An unseeded draw asks the browser’s Web Crypto API for a 32-bit random number with crypto.getRandomValues(), not Math.random(). That number is then mapped to an option using rejection sampling. This matters more than it sounds: the naive value % n is only fair when n divides 2³² exactly. For any other pool size the low indices get one extra chance each — the classic modulo bias. The tool instead discards the handful of values in the uneven tail and redraws, so every option gets an exactly equal number of the accepted values.
Ordering uses a Fisher–Yates shuffle that walks the list from the end and swaps each position with a uniformly chosen index at or below it. Every one of the n! orderings is equally likely. The tempting one-liner list.sort(() => Math.random() - 0.5) is not a shuffle at all: the comparator is inconsistent, and the result depends on the sort algorithm rather than on chance.
Five Ways to Choose
Single Pick returns one winner with every option equally likely. Pick N draws several at once. Ranked Order shuffles the whole list into 1st, 2nd, 3rd — useful for presentation order, draft order and tie-breaks. Weighted Pick honours a weight per option, and Tournament Bracket resolves a long list through random pairwise matchups until one entrant survives, which makes a hard decision feel considered rather than arbitrary.
Weights, Odds and the Probability Table
Write an option as Ship it :: 5 and its chance becomes its weight divided by the total of all weights. Plain numbers, percentages like 40% and fractions like 1/3 are all accepted and all normalised against the same total. The table restates each chance as a percentage, as odds against, as 1 in X, and as the cumulative band the option occupies on the wheel — the marker under the result shows exactly where the drawn value landed inside those bands.
With or Without Replacement
Drawing without replacement takes each winner out of the pool, so a Pick N of 3 from 6 returns three distinct options and every option has a 50% chance of appearing. Drawing with replacement makes each pick independent, so repeats are possible; the chance an option appears at least once across N draws is 1 − ((n−1)/n)^N.
Cleaning a Pasted List
Lists rarely arrive tidy. Switch the delimiter between new lines, commas, semicolons, tabs or a custom string; trim whitespace; drop blank rows; and collapse duplicates with or without case sensitivity. Shorthand expansion turns 1-100 into a hundred numbers, A-Z into letters and Pizza x3 into three entries.
2024-2025 also looks like a range, the tool reports how many rows were expanded on every draw. If your options genuinely contain hyphens or a trailing x and a number, turn off Expand shorthand. Likewise, turn off Read inline weights for lists that use :: as ordinary text.Checking the Distribution Yourself
Randomness is invisible, so the tool keeps a running tally of observed versus expected counts and offers a simulator that runs up to a million virtual draws. It reports the largest gap between observed and expected share and a chi-square goodness-of-fit statistic. A chi-square value near its degrees of freedom is what a fair generator produces on average — a value many times larger would point at a skewed distribution. Everything runs in your own tab, so option text never leaves the browser, and the TXT and CSV exports give you an audit trail to keep.