88 lines
2.0 KiB
Markdown
88 lines
2.0 KiB
Markdown
---
|
||
id: 5900f3d01000cf542c50fee3
|
||
title: 'Problema 100: Probabilidade com arranjo'
|
||
challengeType: 5
|
||
forumTopicId: 301724
|
||
dashedName: 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.
|
||
|
||
```js
|
||
assert(typeof arrangedProbability(10) === 'number');
|
||
```
|
||
|
||
`arrangedProbability(20)` deve retornar `15`.
|
||
|
||
```js
|
||
assert.strictEqual(arrangedProbability(20), 15);
|
||
```
|
||
|
||
`arrangedProbability(100)` deve retornar `85`.
|
||
|
||
```js
|
||
assert.strictEqual(arrangedProbability(100), 85);
|
||
```
|
||
|
||
`arrangedProbability(100000)` deve retornar `97513`.
|
||
|
||
```js
|
||
assert.strictEqual(arrangedProbability(100000), 97513);
|
||
```
|
||
|
||
`arrangedProbability(1000000000)` deve retornar `3822685023`.
|
||
|
||
```js
|
||
assert.strictEqual(arrangedProbability(1000000000), 3822685023);
|
||
```
|
||
|
||
`arrangedProbability(1000000000000)` deve retornar `756872327473`.
|
||
|
||
```js
|
||
assert.strictEqual(arrangedProbability(1000000000000), 756872327473);
|
||
```
|
||
|
||
# --seed--
|
||
|
||
## --seed-contents--
|
||
|
||
```js
|
||
function arrangedProbability(limit) {
|
||
|
||
return true;
|
||
}
|
||
|
||
arrangedProbability(20);
|
||
```
|
||
|
||
# --solutions--
|
||
|
||
```js
|
||
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;
|
||
}
|
||
```
|