async function toss10Times() { if (isAnimating) return; const sides = parseInt(diceSidesSelect.value); const threshold = parseInt(thresholdInput.value); if (threshold > sides) { alert(`Threshold cannot be greater than the number of sides (${sides})`); return; } isAnimating = true; tossBtn.disabled = true; toss10Btn.disabled = true; for (let i = 0; i < 10; i++) { const unlockedCount = dice.filter(d => !d.locked).length; if (unlockedCount === 0) break;
Unlocked dice (dark gray) = Reactants | Locked dice (dark red) = Products
Each toss represents a time step. Dice that roll ≥ threshold value "react" (lock) and cannot revert back. Watch the exponential decay of reactants!