Files
freeCodeCamp/curriculum/challenges/japanese/10-coding-interview-prep/project-euler/problem-100-arranged-probability.md
2022-01-20 20:30:18 +01:00

2.2 KiB
Raw Permalink Blame History

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
5900f3d01000cf542c50fee3 問題 100: 調整された確率 5 301724 problem-100-arranged-probability

--description--

箱の中に、15 枚の青い円盤と 6 枚の赤い円盤、計 21 枚の色付き円盤が入っています。2 枚の円盤を無作為に取り出したときにそれが青い円盤 2 枚である確率は、次のように求めることができます。

{P(BB)} = \frac{15}{21}×\frac{14}{20} = \frac{1}{2}

無作為に取り出した 2 枚が青い円盤である確率がちょうど 50% になるように調整した場合、枚数が次に多いのは、85 枚の青い円盤と 35 枚の赤い円盤が入った箱です。

合計枚数が limit より多くなる最初の調整方法を見つけ、その箱に入っている青い円盤の枚数を求めなさい。

--hints--

arrangedProbability(20) は数値を返す必要があります。

assert(typeof arrangedProbability(10) === 'number');

arrangedProbability(20)15 を返す必要があります。

assert.strictEqual(arrangedProbability(20), 15);

arrangedProbability(100)85 を返す必要があります。

assert.strictEqual(arrangedProbability(100), 85);

arrangedProbability(100000)97513 を返す必要があります。

assert.strictEqual(arrangedProbability(100000), 97513);

arrangedProbability(1000000000)3822685023 を返す必要があります。

assert.strictEqual(arrangedProbability(1000000000), 3822685023);

arrangedProbability(1000000000000)756872327473 を返す必要があります。

assert.strictEqual(arrangedProbability(1000000000000), 756872327473);

--seed--

--seed-contents--

function arrangedProbability(limit) {

  return true;
}

arrangedProbability(20);

--solutions--

function arrangedProbability(limit) {
  // Based on https://www.mathblog.dk/project-euler-100-blue-discs-two-blue/
  let blue = 15;
  let discs = 21;

  while (discs < limit) {
    const nextBlue = 3 * blue + 2 * discs - 2;
    const nextDiscs = 4 * blue + 3 * discs - 3;

    blue = nextBlue;
    discs = nextDiscs;
  }
  return blue;
}