57 lines
3.2 KiB
Markdown
57 lines
3.2 KiB
Markdown
![]() |
---
|
|||
|
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
|
|||
|
```
|