JSFiddle - React, Tailwind, and code Playground

JavaScript

var HEADS = 0;
var TAILS = 1;

var DOUBLE_HEADED_COIN_INDEX = 35;  // Arbitrary.
var NUM_COINS = 1000;

// Draws a coin out of NUM_COINS uniformly and returns its index.
function pickCoin() {
  // Pick a coin.
  return Math.floor(Math.random() * NUM_COINS);
}

function tossCoin(coinIndex) {
  if (coinIndex == DOUBLE_HEADED_COIN_INDEX) {
    return HEADS;
  }
  return (Math.random() >= 0.5) ? HEADS : TAILS;
}

// Returns the number of heads seen until tails is seen, up to
// maxHeads.
function tossUntilTails(coinIndex, maxHeads) {
  var numHeads = 0;
  while (numHeads < maxHeads) {
    if (tossCoin(coinIndex) == TAILS) {
      break;
    }
    ++numHeads;
  }
  return numHeads;
}

function runSimulation(numIters) {
  var numHeads = 0, numTails = 0;
  for (var i = 0; i < numIters; i++) {
    // Loop until we get 10 heads in a row.
    var coinIndex;
    while (true) {
      coinIndex = pickCoin();
      if (tossUntilTails(coinIndex, 10) == 10) {
        break;
      }
    }

    if (tossCoin(coinIndex) == HEADS) {
      numHeads++;
    } else {
      numTails++;
    }
  }
  var pHead = numHeads / (numHeads + numTails);
  document.write("Got " + numHeads + " heads and " + numTails + " tails; " +
              "p(HEAD) = " + pHead);
}

runSimulation(10000);