Back to all solutions

#837 - New 21 Game

Problem Description

Alice plays the following game, loosely based on the card game "21".

Alice starts with 0 points and draws numbers while she has less than k points. During each draw, she gains an integer number of points randomly from the range [1, maxPts], where maxPts is an integer. Each draw is independent and the outcomes have equal probabilities.

Alice stops drawing numbers when she gets k or more points.

Return the probability that Alice has n or fewer points.

Answers within 10-5 of the actual answer are considered accepted.

Solution

/**
 * @param {number} n
 * @param {number} k
 * @param {number} maxPts
 * @return {number}
 */
var new21Game = function(n, k, maxPts) {
  if (k === 0 || n >= k + maxPts - 1) return 1.0;

  const dp = new Array(n + 1).fill(0);
  dp[0] = 1.0;

  let sum = 1.0;
  for (let i = 1; i <= n; i++) {
    dp[i] = sum / maxPts;
    if (i < k) {
      sum += dp[i];
    }
    if (i >= maxPts) {
      sum -= dp[i - maxPts];
    }
  }

  let result = 0;
  for (let i = k; i <= n; i++) {
    result += dp[i];
  }

  return result;
};