80 lines
2.1 KiB
Markdown
80 lines
2.1 KiB
Markdown
![]() |
---
|
|||
|
id: 594810f028c0303b75339ace
|
|||
|
title: Акумуляторна фабрика
|
|||
|
challengeType: 5
|
|||
|
forumTopicId: 302222
|
|||
|
dashedName: accumulator-factory
|
|||
|
---
|
|||
|
|
|||
|
# --description--
|
|||
|
|
|||
|
Проблема, спричинена [Paul Graham](https://en.wikipedia.org/wiki/Paul_Graham_(programmer)) полягає у створенні функції, яка приймає один (числовий) аргумент, і яка повертає іншу функцію, тобто акумулятор. Повернена акумуляторна функція в свою чергу також бере один числовий аргумент, і повертає суму усіх числових значень, прийнятих до цього часу до цього акумулятора (включаючи початкове значення, передане при створенні акумулятора).
|
|||
|
|
|||
|
# --instructions--
|
|||
|
|
|||
|
Створіть функцію, яка приймає число $n$ і генерує акумуляторні функції, які повертають суму кожного числа, яке до них додадуть.
|
|||
|
|
|||
|
**Правила:**
|
|||
|
|
|||
|
Не використовуйте глобальні змінні.
|
|||
|
|
|||
|
**Підказка:**
|
|||
|
|
|||
|
Закриття економить зовнішній стан.
|
|||
|
|
|||
|
# --hints--
|
|||
|
|
|||
|
`accumulator` має бути функцією.
|
|||
|
|
|||
|
```js
|
|||
|
assert(typeof accumulator === 'function');
|
|||
|
```
|
|||
|
|
|||
|
`accumulator(0)` має відображати функцію.
|
|||
|
|
|||
|
```js
|
|||
|
assert(typeof accumulator(0) === 'function');
|
|||
|
```
|
|||
|
|
|||
|
`accumulator(0)(2)` має відображати число.
|
|||
|
|
|||
|
```js
|
|||
|
assert(typeof accumulator(0)(2) === 'number');
|
|||
|
```
|
|||
|
|
|||
|
Перехід у значеннях 3, -4, 1.5 і 5 має видати 5,5.
|
|||
|
|
|||
|
```js
|
|||
|
assert(testFn(5) === 5.5);
|
|||
|
```
|
|||
|
|
|||
|
# --seed--
|
|||
|
|
|||
|
## --after-user-code--
|
|||
|
|
|||
|
```js
|
|||
|
const testFn = typeof accumulator(3) === 'function' && accumulator(3);
|
|||
|
if (testFn) {
|
|||
|
testFn(-4);
|
|||
|
testFn(1.5);
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
## --seed-contents--
|
|||
|
|
|||
|
```js
|
|||
|
function accumulator(sum) {
|
|||
|
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
# --solutions--
|
|||
|
|
|||
|
```js
|
|||
|
function accumulator(sum) {
|
|||
|
return function(n) {
|
|||
|
return sum += n;
|
|||
|
};
|
|||
|
}
|
|||
|
```
|