The winner comes out of
two published files.
Two things decide who wins. The ticket list, frozen and published the night before. And a random number from outside that first exists at 4pm. Both are out of our hands by the time the draw runs.
“Did those files really produce that winner?”
Load the two published files below. Your own browser redoes the entire draw and answers in one line.
How a winner gets picked
Two things decide it. A list that is public before the draw, and a number that arrives only at 4pm.
Change either one, even by one letter, and somebody else wins instead. The list is fixed and public before the draw, and the number arrives at 4pm. By the time anyone can work out the answer, there is nothing left to change.
Is the list itself clean?
Checking…First we check the list of tickets. Every code appears once. The numbers run in order with none missing. Anyone who already won is out. If anything is off, the draw stops there.
Show the five checks
The short code proves this list did not change. It cannot prove the list was complete to begin with — a list missing twenty tickets would still match its own short code. That check needs a count from outside the file, so it sits with people who have one: Coria & Co., our Independent Accountant, reconciles the ticket count against collections and reports the findings, and College '86 confirms the same short code we publish.
The check you can do takes ten seconds: open the list and find your own code in it.
Was the list locked before the draw?
Checking…Yes. We print the list and publish it in the morning, hours before the draw. College '86 checks it too. If anyone slipped a ticket in or took one out afterwards, the number below would change and everyone would see it.
See every ticket in the list ↗ Published in full, counted in your own browser. Ticket numbers and codes only, no names.
Show the short code
Where does the random number come from?
ExternalFrom drand, run by the League of Entropy — a group of universities and technology companies, Cloudflare among them, who each contribute a piece of every number so no single member can steer it. It puts out a brand new random number every three seconds, for anyone in the world to see. In the morning we say which one we will use, while that number still does not exist. It reaches us at the same moment it reaches you. The file that names it also carries a number that had already appeared, so you can check for yourself that we wrote it before the draw.
Show the number and where to check it
drand.cloudflare.com ↗ . Two independent hosts, same value. Swap latest for this draw's round number to check it.
How does a number become a winner?
Computing…Two things go in: the number that arrived at four o’clock, and the short code of the frozen list. They are joined and run through one calculation, which turns them into a single long code. That code unpacks into a stream of plain numbers, and those numbers shuffle the list — one swap at a time — until the order is settled. Whichever ticket is on top wins.
Every ticket has the same chance of finishing on top. And because the same two inputs always produce the same shuffle, anyone can run it again and land on the same winner. Below: the shape of it, then the same thing on six tickets so you can follow every move.
Follow the two lines out of the top box. Its short code goes left, into the mixing. The list itself goes right, all the way down, because it is the thing being shuffled. Those are two different jobs, and it is the part people usually miss.
Every ticket still in the hat has the same chance of being the one your hand closes on. The first eight out take the eight prizes, in order. That is the whole thing.
Our code reaches the same result a faster way. Instead of lifting tickets out of a hat, it lays them in a row and swaps them into place. Same draw, less work. Here it is on six cards — six instead of 630, so you can watch every move.
The long code from the box above is just a very long string of characters. Read it a piece at a time and each piece gives a plain number. Six cards need five numbers, not six — once five are placed, the last one has nowhere else to be. These are the five it gave.
Nobody picks these. They fall out of the code, and the code came from the frozen list and the four o’clock number.
Six tickets in a row. We have labelled them A to F so they are easy to tell apart, and numbered the six places they sit in 1 to 6.
Start at the last card and work left. Each number names a place; your card and the card sitting in that place trade with each other. Use one number per card, in order.
Keep your eye on C.
-
Before anything happens. C is sitting in place 3.
ABCDEF
-
First number, from 1–6: it says 4. Start at the last card, F. It swaps with
whatever is in place 4 — that is D.
ABCFED
-
Second number, now only from 1–5: it says 5. The card in place 5 is E, and
place 5 is where E already is, so nothing happens.
ABCFED
-
Third number, from 1–4: it says 1. The card in place 4 is F. It swaps with
place 1 — that is A.
FBCAED
-
Fourth number, from 1–3: it says 1. The card in place 3 is
C. It swaps with place 1, where F now sits.
C moves to the front.
CBFAED
-
Fifth number, only 1 or 2 left: it says 2. The card in place 2 is B, and place 2
is where B already is. Nothing happens, and we are done.
CBFAED
C started in place 3 and finished first. Nobody moved it there on purpose — it was moved by the fourth number, which came out of a code that came out of the frozen list and a number from four o’clock. Feed the same two things in again and C lands first again, every time.
Twice a card stayed where it was. That has to be allowed. If a card could never keep its own slot, the cards that started at the front would finish at the front too often, and the shuffle would not be fair.
Show the maths
What the box above is doing, in words.
Those five lines get stuck together in that exact order and run through one standard calculation. It always returns the same length of answer, and changing any input by a single character changes the whole answer. The calculation is called SHA-256. It is the same one banks and browsers use, and it was not written by us.
The answer is the long code — the final seed. It is what unpacks into the run of numbers you saw in the walkthrough.
Shuffling with those numbers has a proper name too: the Fisher–Yates shuffle, published in 1938 for people doing it by hand and used everywhere since. It is exactly the walk down the positions shown above.
One last detail, and it is the reason the shuffle is fair. Each number arrives as a value from 0 to 255, but we need a position from 1 to 630. The lazy way is to divide and keep the remainder, but that hands the earliest tickets a slightly better chance. So instead we throw away any number that falls outside the range and take the next one. Slower, and the only way everybody gets the same odds.
The winner
—Winners are contacted directly, and weekly winners are announced on the ’01 Big Fight pages — anyone who would rather we used their ticket code alone only has to say. Identity is confirmed against a government ID before any prize changes hands.
Everyone else, in order
The same shuffle, further down the list. We publish all of it so people can check the whole thing, not just the top.
An unclaimed prize goes into a brand new draw. Same original list, freshly locked, with a new public number. Nobody moves up a place, and tickets that already won stay out of it.
Show the rest of the order
Check it without trusting this page
Everything on this page comes from a handful of files, and all of them are public. You do not have to read them — but they are here, they are copied somewhere we cannot edit, and anyone who wants to check our working can.
We also wrote the method out twice, in two unrelated programming languages. If we had made a mistake in one, the other would give a different winner and the difference would show. They agree.
Most people should use the box further down this page — it does the same job in your browser, with no software to install. The commands below are for anyone who would rather run it themselves, or hand it to someone technical to run for them.
Show the terminal commands
Four commands. If any of them fails, the draw is void and we say so publicly.
# get the method and this draw's files curl -O https://01bigfight.com/raffle/method/raffle-draw.mjs curl -O https://01bigfight.com/raffle/sample/pool-00.csv curl -O https://01bigfight.com/raffle/sample/draw-00.json # 1 does the pool match what was published before the draw? shasum -a 256 pool-00.csv # 2 re-run the whole draw yourself node raffle-draw.mjs verify --manifest draw-00.json --pool pool-00.csv # 3 check the picker gives every ticket the same chance node raffle-draw.mjs selftest # or check us with the second implementation, which shares no code python3 raffle-draw.py verify --manifest draw-00.json --pool pool-00.csv
Or check a past draw right here
Load any published ticket list and its instructions file. Nothing is uploaded. The files are read and recomputed inside your own browser, offline if you like.