---
id: 5900f49a1000cf542c50ffac
title: 'Завдання 300: Згортання білка'
challengeType: 1
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
```
