Closures e gerador de sequência com memória

JavaScript Hard closures

Tarefa «Closures e gerador de sequência com memória»

Implemente a função createSequenceGenerator, que recebe um valor inicial e um passo. A função retorna um objeto com dois métodos: next() e reset(). O método next() retorna o próximo valor da sequência (começando pelo valor inicial, incrementando pelo passo a cada chamada). O método reset() reinicia a sequência para o valor inicial. Além disso, o método next() deve armazenar todos os valores gerados em um array, acessível através da propriedade history do objeto. A propriedade history deve ser protegida contra modificação direta externa, mas deve ser legível. Use closures para encapsular o estado.

Formato de Entrada

Primeira linha: valor inicial (número inteiro). Segunda linha: passo (número inteiro). Em seguida, uma linha com comandos: 'next' (chamar next()) ou 'reset' (chamar reset()). Os comandos se repetem até o final da entrada.

Formato de Saída

Para cada comando 'next', imprima o valor atual da sequência. Para 'reset', não imprima nada.

Exemplos

Exemplo 1

ENTRADA
10 -3 next next next reset next
SAÍDA
10 7 4 10

Exemplo 2

ENTRADA
2 7 13
SAÍDA
91
main.js