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
|
||
```
|