The Unjournal
The Unjournal

Honorable Mention Lottery Draw

Transparent random selection of two $500 prize winners from the five honorable mentions.

← Back to Prize Announcement

How This Works

Two of the five honorable mention recipients will receive an additional $500 prize each. We select the two lottery winners using a deterministic draw that anyone can reproduce.

The Process

  1. Pre-announcement (Day −1): We announce on Bluesky the seed source and date: the seed will be based on the regular-session closing value (4:00 pm ET) of the S&P 500 on the specified date.
  2. Seed determination (Day 0): After the market closes, we take the S&P 500 closing value (to 2 decimal places) and publish the exact seed string and the resulting winners.
  3. Verification: Anyone can paste the seed into this page and get the same winners. The algorithm is fully deterministic—the same seed always produces the same result.

Seed Source

Index: S&P 500 (SPX) — official index page

Value: Regular-session closing value (4:00 pm ET) on Tuesday, February 10, 2026, displayed to 2 decimal places.

Reference source: MarketWatch SPX page

The algorithm is a seeded pseudorandom number generator (mulberry32) applied to a Fisher-Yates shuffle. All code runs entirely in your browser—nothing is sent to any server.

The Five Honorable Mentions

Run the Draw

Winners Selected!

Technical Details & Verification

The randomization algorithm is fully deterministic and runs client-side. To verify independently:

  1. The seed string is hashed using a simple hash function (cyrb53).
  2. The hash seeds a mulberry32 PRNG.
  3. A Fisher-Yates shuffle is applied to the candidate indices [0,1,2,3,4].
  4. The first two elements of the shuffled array are the winners.

You can verify the result by viewing this page's source code or running the equivalent algorithm in any programming language. The code below is the complete implementation:

// Hash function: cyrb53
function cyrb53(str, seed = 0) {
  let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed;
  for (let i = 0; i < str.length; i++) {
    let ch = str.charCodeAt(i);
    h1 = Math.imul(h1 ^ ch, 2654435761);
    h2 = Math.imul(h2 ^ ch, 1597334677);
  }
  h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507);
  h1 ^= Math.imul(h2 ^ (h2 >>> 13), 3266489909);
  h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507);
  h2 ^= Math.imul(h1 ^ (h1 >>> 13), 3266489909);
  return 4294967296 * (2097151 & h2) + (h1 >>> 0);
}

// PRNG: mulberry32
function mulberry32(a) {
  return function() {
    a |= 0; a = a + 0x6D2B79F5 | 0;
    var t = Math.imul(a ^ a >>> 15, 1 | a);
    t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t;
    return ((t ^ t >>> 14) >>> 0) / 4294967296;
  };
}

// Fisher-Yates shuffle with seeded PRNG
function seededShuffle(arr, seed) {
  const rng = mulberry32(seed);
  const a = [...arr];
  for (let i = a.length - 1; i > 0; i--) {
    const j = Math.floor(rng() * (i + 1));
    [a[i], a[j]] = [a[j], a[i]];
  }
  return a;
}

// Usage:
const hash = cyrb53(seedString);
const indices = seededShuffle([0,1,2,3,4], hash & 0xFFFFFFFF);
// Winners: indices[0], indices[1]