Logo

MonoCalc

/

Random Choice Generator

Random
One option per line by default. Add a weight with "Option :: 5". Up to 10,000 options.
4 options in pool
PizzaSushiTacosRamen
One winner, every option equally likely.
Blank means an unpredictable crypto.getRandomValues() draw that cannot be replayed.
Precision for probabilities and percentages (0–10).
How the list is split.
Comma or newline separated. Matched without case sensitivity.

Expand shorthand turns 1-100 into a hundred options, A-Z into letters and Pizza x3 into three entries — turn it off if your options genuinely contain hyphens. Read inline weights treats everything after :: as a weight — turn it off for lists that use :: as ordinary text.

Keyboard: press Enter to draw again or R to reset, whenever you are not typing in a field.

Press Pick to draw from 4 options.

Cumulative range

Each band is one option, sized by its share of the total weight. The marker shows where the drawn value landed.

Probability per option

OptionWeightChanceOdds1 inRangeObserved

Pizza

125.00%3 : 1 against1 in 40.00000.25000

Sushi

125.00%3 : 1 against1 in 40.25000.50000

Tacos

125.00%3 : 1 against1 in 40.50000.75000

Ramen

125.00%3 : 1 against1 in 40.75001.00000

Distribution check

Run many virtual draws and compare the observed counts against the declared probabilities. The draws are simulated only — they do not touch the result above or the history.

Between 1 and 1,000,000.

About This Tool

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.

Seeded draws are reproducible, not secret
Entering a seed switches to a small deterministic generator so the same seed and list always produce the same result on any device — ideal for publishing a draw in advance. It is evenly distributed but predictable to anyone who knows the seed. Leave the seed blank for the cryptographically strong path, which cannot be replayed.

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.

Shorthand is greedy by design
Because 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.

Frequently Asked Questions

Is the Random Choice Generator free?

Yes, Random Choice Generator is totally free :)

Can I use the Random Choice Generator offline?

Yes, you can install the webapp as PWA.

Is it safe to use Random Choice Generator?

Yes, any data related to Random Choice Generator only stored in your browser (if storage required). You can simply clear browser cache to clear all the stored data. We do not store any data on server.

How does the Random Choice Generator pick a winner?

Paste your options one per line and press Pick. For an unseeded draw the tool asks the browser's Web Crypto API (crypto.getRandomValues) for a 32-bit random number, then maps it to an option using rejection sampling — it discards the few values that would not divide evenly across the pool, so no option is ever slightly more likely than another. Ordering modes use a downward Fisher–Yates shuffle, which makes every possible ordering equally likely.

How do weights work, and what happens to a weight of zero?

Write an option as Option :: 5 and its chance becomes 5 divided by the total of all weights. You can mix plain numbers (2, 0.5), percentages (40%) and fractions (1/3) — every form is normalised against the same total, so 40% only means 40% if every other row is also a percentage. An option with weight 0 stays in the table, is shown as 0.00%, and is never drawn; the tool warns you rather than quietly hiding it. Negative, non-numeric and infinite weights are rejected by row number instead of silently defaulting to 1.

Is a seeded draw still cryptographically strong?

No, and the tool says so on screen. Reproducibility and cryptographic strength are mutually exclusive: a seeded draw runs a small deterministic generator (mulberry32) so the same seed and the same list always produce the same result on any device, which is what makes a draw publishable in advance. It is evenly distributed but predictable to anyone who knows the seed. Leave the seed blank for the crypto.getRandomValues path, which is unpredictable but cannot be replayed.

What is the difference between drawing with and without replacement?

Without replacement, each drawn option is taken out of the pool, so Pick N returns N distinct options and any given option has an N/n chance of appearing. With replacement, every draw is independent and the same option can come up more than once; the chance an option appears at least once across N draws is 1 − ((n−1)/n)^N. Pick N without replacement is capped at the pool size — the tool refuses to pick 8 from 5 rather than looping.

Does Tournament Bracket give every option an equal chance?

With equal weights, yes. The pool is re-shuffled before every round, so the pairings and any bye are assigned uniformly at random and the champion is equally likely to be any entrant. If you set weights, the bracket uses them for each individual matchup — p(A) = wA / (wA + wB) — but a knockout does not turn per-matchup weights into overall odds of w / Σw, so the probability table does not describe champion chances in that mode. Use Weighted Pick when you need the table to be exact.

Does my list of options leave the browser?

No. Parsing, weighting, drawing and exporting all run in your own tab, and nothing is uploaded or stored on a server, so the tool is safe for names, candidate shortlists and internal options. The draw history and tally exist only for the current page — reloading the page clears them, so download the TXT or CSV report if you need an audit trail.