freeCodeCamp/curriculum/challenges/portuguese/10-coding-interview-prep/rosetta-code/accumulator-factory.md

1.6 KiB

id title challengeType forumTopicId dashedName
594810f028c0303b75339ace Fábrica de acumuladores 5 302222 accumulator-factory

--description--

Um problema proposto por Paul Graham é o de criar uma função que recebe um único argumento (numérico) e que retorna outra função que é um acumulador. A função de acumulador retornada, por sua vez, também recebe um único argumento numérico e retorna a soma de todos os valores numéricos passados até aquele momento para esse acumulador (incluindo o valor inicial passado quando o acumulador foi criado).

--instructions--

Crie uma função que receba um número n e gere funções acumuladoras que retornam a soma de cada número já passado para elas.

Regras:

Não use variáveis globais.

Dica:

Closures salvam o estado externo.

--hints--

accumulator deve ser uma função.

assert(typeof accumulator === 'function');

accumulator(0) deve retornar uma função.

assert(typeof accumulator(0) === 'function');

accumulator(0)(2) deve retornar um número.

assert(typeof accumulator(0)(2) === 'number');

Ao passar os valores 3, -4, 1.5 e 5, o valor retornado deve ser 5.5.

assert(testFn(5) === 5.5);

--seed--

--after-user-code--

const testFn = typeof accumulator(3) === 'function' && accumulator(3);
if (testFn) {
  testFn(-4);
  testFn(1.5);
}

--seed-contents--

function accumulator(sum) {

}

--solutions--

function accumulator(sum) {
  return function(n) {
    return sum += n;
  };
}