Files
freeCodeCamp/curriculum/challenges/ukrainian/10-coding-interview-prep/rosetta-code/sailors-coconuts-and-a-monkey-problem.md

91 lines
4.3 KiB
Markdown
Raw Permalink Normal View History

---
id: 59da22823d04c95919d46269
title: 'Задача про моряків, кокоси та мавп'
challengeType: 5
forumTopicId: 302304
dashedName: sailors-coconuts-and-a-monkey-problem
---
# --description--
П'ять моряків розбилися на острові і назбирали велику купу кокосів протягом дня. Тієї ночі перший моряк прокидається і вирішує завчасно взяти свою першу частку, тому намагається поділити купки з кокосами порівно на п'ять маленьких частин, але дізнається, що залишається один кокос, тому він кидає його мавпі і потім ховає "свій" в один із п'яти однакових за розміром куп з кокосами і зіштовхує інші чотири купи разом для того, щоб знову утворити єдину видиму купу з кокосами і йде спати. Коротше кажучи, кожний моряк один раз встає протягом ночі і виконує ті ж самі дії: ділить купу кокосів на 5 частин, знаходить один кокос, що залишився, і віддає його мавпі. Вранці( після спантеличених та окремих вчинків кожного з п'яти моряків протягом ночі), кокоси, що залишилися були поділені на п'ять однакових куп для кожного з моряків, після чого виявилося, що вони поділені порівно серед моряків без залишку. (Зранку нічого не залишилось для мавпи.)
# --instructions--
Створіть функцію, що повертає мінімальний можливий розмір початкової купи з кокосами, зібраної протягом дня для `N` моряків. **Зверніть увагу:** Звичайно, у світі розповідаються казки про збирання будь-якої кількості кокосових горіхів за день і множинні поділи купи, тощо, можуть виникнути у час, який відповідає сюжетній лінії, щоб таким чином не впливати на математику. **Подивіться також:**
<ul>
<li><a href="https://www.youtube.com/watch?v=U9qU20VmvaU" target="_blank">Мавпи і кокоси - Numberphile</a>(Відео) Аналітичне рішення.</li>
<li><a href="https://oeis.org/A002021" target="_blank">A002021 Задача про купи з коксами</a> Енциклопедія цінової послідовності цілих чисел. (Хоча деякі з цих посилань можуть використовувати альтернативну форму казки).</li>
</ul>
# --hints--
`splitCoconuts` має бути функцією.
```js
assert(typeof splitCoconuts === 'function');
```
`splitCoconuts(5)` має повернути 3121.
```js
assert(splitCoconuts(5) === 3121);
```
`splitCoconuts(6)` має повернути 233275.
```js
assert(splitCoconuts(6) === 233275);
```
`splitCoconuts(7)`має повернути 823537.
```js
assert(splitCoconuts(7) === 823537);
```
# --seed--
## --seed-contents--
```js
function splitCoconuts(intSailors) {
return true;
}
```
# --solutions--
```js
function splitCoconuts(intSailors) {
let intNuts = intSailors;
let result = splitCoconutsHelper(intNuts, intSailors);
while (!result) {
intNuts += 1;
result = splitCoconutsHelper(intNuts, intSailors);
}
return intNuts;
}
function splitCoconutsHelper(intNuts, intSailors, intDepth) {
const nDepth = intDepth !== undefined ? intDepth : intSailors;
const portion = Math.floor(intNuts / intSailors);
const remain = intNuts % intSailors;
if (portion <= 0 || remain !== (nDepth ? 1 : 0)) {
return null;
}
if (nDepth) {
return splitCoconutsHelper(
intNuts - portion - remain, intSailors, nDepth - 1
);
}
return intNuts;
}
```