Oliver Eyton-Williams ee1e8abd87
feat(curriculum): restore seed + solution to Chinese (#40683)
* feat(tools): add seed/solution restore script

* chore(curriculum): remove empty sections' markers

* chore(curriculum): add seed + solution to Chinese

* chore: remove old formatter

* fix: update getChallenges

parse translated challenges separately, without reference to the source

* chore(curriculum): add dashedName to English

* chore(curriculum): add dashedName to Chinese

* refactor: remove unused challenge property 'name'

* fix: relax dashedName requirement

* fix: stray tag

Remove stray `pre` tag from challenge file.

Signed-off-by: nhcarrigan <nhcarrigan@gmail.com>

Co-authored-by: nhcarrigan <nhcarrigan@gmail.com>
2021-01-12 19:31:00 -07:00

118 lines
2.6 KiB
Markdown

---
id: 5a23c84252665b21eecc7e7b
title: Generator/Exponential
challengeType: 5
forumTopicId: 302275
dashedName: generatorexponential
---
# --description--
A generator is an executable entity (like a function or procedure) that contains code that yields a sequence of values, one at a time, so that each time you call the generator, the next value in the sequence is provided.
Generators are often built on top of coroutines or objects so that the internal state of the object is handled "naturally".
Generators are often used in situations where a sequence is potentially infinite, and where it is possible to construct the next value of the sequence with only minimal state.
# --instructions--
Write a function that uses generators to generate squares and cubes. Create a new generator that filters all cubes from the generator of squares.
The function should return the \\( n^{th} \\) value of the filtered generator.
For example for \\(n=7\\), the function should return 81 as the sequence would be 4, 9, 16, 25, 36, 49, 81. Here 64 is filtered out, as it is a cube.
# --hints--
`exponentialGenerator` should be a function.
```js
assert(typeof exponentialGenerator == 'function');
```
`exponentialGenerator()` should return a number.
```js
assert(typeof exponentialGenerator(10) == 'number');
```
`exponentialGenerator(10)` should return `144`.
```js
assert.equal(exponentialGenerator(10), 144);
```
`exponentialGenerator(12)` should return `196`.
```js
assert.equal(exponentialGenerator(12), 196);
```
`exponentialGenerator(14)` should return `256`.
```js
assert.equal(exponentialGenerator(14), 256);
```
`exponentialGenerator(20)` should return `484`.
```js
assert.equal(exponentialGenerator(20), 484);
```
`exponentialGenerator(25)` should return `784`.
```js
assert.equal(exponentialGenerator(25), 784);
```
# --seed--
## --seed-contents--
```js
function exponentialGenerator(n) {
}
```
# --solutions--
```js
function exponentialGenerator(n){
function* PowersGenerator(m) {
var n=0;
while(1) {
yield Math.pow(n, m);
n += 1;
}
}
function* FilteredGenerator(g, f){
var value = g.next().value;
var filter = f.next().value;
while(1) {
if( value < filter ) {
yield value;
value = g.next().value;
} else if ( value > filter ) {
filter = f.next().value;
} else {
value = g.next().value;
filter = f.next().value;
}
}
}
var squares = PowersGenerator(2);
var cubes = PowersGenerator(3);
var filtered = FilteredGenerator(squares, cubes);
var curr=0;
for(var i=0;i<n;i++) curr=filtered.next();
return curr.value;
}
```