Files

57 lines
3.2 KiB
Markdown
Raw Permalink Normal View History

---
id: 5900f49a1000cf542c50ffac
title: 'Завдання 300: Згортання білка'
challengeType: 5
forumTopicId: 301954
dashedName: problem-300-protein-folding
---
# --description--
Якщо говорити простими словами, білки — це ланцюги, які складаються з гідрофобних (H) та полярних елементів, наприклад таких HHPPHHHPHHPH.
Для цього завдання, орієнтація білка така ж важлива, наприклад HPP відрізняється від PPH. Таким чином, є $2^n$ різні білки, що складаються з $n$ елементів.
Коли будь-що стикається з цими ланцюгами в природі, вони згортаються таким чином, що кількість точок дотику H-H настільки велика, наскільки це можливо, що є енергетично вигідним.
У результаті H-елементи, як правило, накопичуються у внутрішній частині, у той час, як P-елементи — у зовнішній.
Природні білки, звісно, згортаються в тривимірному просторі, але ми розглядатимемо цей процес у <u>двовимірній площині</u>.
На зображенні нижче показні два можливих способи, як можуть згортатися білки (точки контакту Н-Н виділені червоними точками).
<img class="img-responsive center-block" alt="два можливих приклади згортання білків" src="https://cdn.freecodecamp.org/curriculum/project-euler/protein-folding.gif" style="background-color: white; padding: 10px;" />
Приклад зліва має лише 6 точок дотику, чого ніколи не трапляється в природі. З іншого боку, протеїн праворуч має дев'ять точок дотику H-H, що є оптимальним.
Припускаючи, що H- та P-елементи з однаковою ймовірністю трапляються в межах цього ланцюга, середня кількість точок дотику H-H за оптимальних умов випадкової стрічки білка довжиною 8 — $\frac{850}{2^8} = 3.3203125$.
Якою буде середня кількість дочок дотику H-H у випадковій стрічці, що згортається за сприятливих умов і має довжину 15? Для точнішої відповіді можна залишати стільки знаків після коми, скільки потрібно.
# --hints--
`proteinFolding()` має повернути `8.0540771484375`.
```js
assert.strictEqual(proteinFolding(), 8.0540771484375);
```
# --seed--
## --seed-contents--
```js
function proteinFolding() {
return true;
}
proteinFolding();
```
# --solutions--
```js
// solution required
```