88 lines
2.4 KiB
Markdown
88 lines
2.4 KiB
Markdown
![]() |
---
|
|||
|
id: 5900f3d01000cf542c50fee3
|
|||
|
title: 'Завдання 100: Ймовірні комбінації'
|
|||
|
challengeType: 5
|
|||
|
forumTopicId: 301724
|
|||
|
dashedName: problem-100-arranged-probability
|
|||
|
---
|
|||
|
|
|||
|
# --description--
|
|||
|
|
|||
|
Припустимо, що в коробці є двадцять один кольоровий диск, з яких п’ятнадцять - синього кольору, а шість - червоного; два диски обрали навмання, тож, є ймовірність, що обрали одразу два синіх диски.
|
|||
|
|
|||
|
$${P(BB)} = \frac{15}{21}×\frac{14}{20} = \frac{1}{2}$$
|
|||
|
|
|||
|
Наступний варіант розміщення дисків, за якого вірогідність взяти навмання два синіх диски становить 50%, це коли у коробці є вісімдесят п’ять синіх і тридцять п’ять червоних дисків.
|
|||
|
|
|||
|
Визначте ймовірну кількість синіх дисків у коробці, якщо у першому варіанті загальна кількість становить більше `limit` дисків.
|
|||
|
|
|||
|
# --hints--
|
|||
|
|
|||
|
`arrangedProbability(20)` дорівнює числу.
|
|||
|
|
|||
|
```js
|
|||
|
assert(typeof arrangedProbability(10) === 'number');
|
|||
|
```
|
|||
|
|
|||
|
`arrangedProbability(20)` має повернути `15`.
|
|||
|
|
|||
|
```js
|
|||
|
assert.strictEqual(arrangedProbability(20), 15);
|
|||
|
```
|
|||
|
|
|||
|
`arrangedProbability(100)` має повернути `85`.
|
|||
|
|
|||
|
```js
|
|||
|
assert.strictEqual(arrangedProbability(100), 85);
|
|||
|
```
|
|||
|
|
|||
|
`arrangedProbability(100000)` має повернути `97513`.
|
|||
|
|
|||
|
```js
|
|||
|
assert.strictEqual(arrangedProbability(100000), 97513);
|
|||
|
```
|
|||
|
|
|||
|
`arrangedProbability(1000000000)` має повернути `3822685023`.
|
|||
|
|
|||
|
```js
|
|||
|
assert.strictEqual(arrangedProbability(1000000000), 3822685023);
|
|||
|
```
|
|||
|
|
|||
|
`arrangedProbability(1000000000000)` має повернути `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;
|
|||
|
}
|
|||
|
```
|