freeCodeCamp/curriculum/challenges/portuguese/10-coding-interview-prep/project-euler/problem-100-arranged-probab...

2.0 KiB
Raw Blame History

id title challengeType forumTopicId dashedName
5900f3d01000cf542c50fee3 Problema 100: Probabilidade com arranjo 5 301724 problem-100-arranged-probability

--description--

Suponha que uma caixa tem vinte e um discos coloridos, quinze discos azuis e seis discos vermelhos. Se dois discos forem escolhidos aleatoriamente, é possível ver a probabilidade de receber dois discos azuis.

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

O arranjo seguinte, para o qual há exatamente 50% de chance de pegar dois discos azuis ao acaso, é uma caixa contendo oitenta e cinco discos azuis e trinta e cinco discos vermelhos.

Ao encontrar o primeiro arranjo contendo limit discos no total, determine o número de discos azuis que a caixa contém.

--hints--

arrangedProbability(20) deve retornar um número.

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

arrangedProbability(20) deve retornar 15.

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

arrangedProbability(100) deve retornar 85.

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

arrangedProbability(100000) deve retornar 97513.

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

arrangedProbability(1000000000) deve retornar 3822685023.

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

arrangedProbability(1000000000000) deve retornar 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;
}