Files

130 lines
5.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
id: 5ea281203167d2b0bdefca00
title: Ігрові числа
challengeType: 5
forumTopicId: 385282
dashedName: ludic-numbers
---
# --description--
[Ігрові числа](https://oeis.org/wiki/Ludic_numbers) пов'язані з простими числами, бо вони генеруються за допомогою фільтру, так само як [ Решето Ератосфена](https://rosettacode.org/wiki/Sieve_of_Eratosthenes) використовується для генерації простих чисел.
Перше ігрове число - це 1.
Щоб згенерувати наступні ігрові числа, створіть масив зі зростаючих цілих чисел, починаючи від 2.
<code style='margin-left: 2em;'><span style='color:blue;font-weight:bold'>2</span> 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ...</code>
(Цикл)
<ul>
<li>Візьміть перший член результатного масиву як наступне ігрове число <span style='color:blue;font-weight:bold'>2</span>.</li>
<li>Видаліть кожен <strong>2<sup>й</sup></strong> пронумерований абзац із масиву (включно з першим).</li>
<code style='margin-left: 2em;'><span style='color:blue;font-weight:bold;'><s>2</s></span> 3 <s>4</s> 5 <s>6</s> 7 <s>8</s> 9 <s>10</s> 11 <s>12</s> 13 <s>14</s> 15 <s>16</s> 17 <s>18</s> 19 <s>20</s> 21 <s>22</s> 23 <s>24</s> 25 <s>26</s> ...</code>
</ul>
<ul>
<li>(Прокрутка декількох циклів...)</li>
<li>Візьміть перший член результатного масиву як наступне ігрове число <span style='color:blue;font-weight:bold'>3</span>.</li>
<li>Видаліть кожен <strong>3<sup>й</sup></strong> пронумерований абзац із масиву (включно з першим).</li>
<code style='margin-left: 2em;'><span style='color:blue;font-weight:bold'><s>3</s></span> 5 7 <s>9</s> 11 13 <s>15</s> 17 19 <s>21</s> 23 25 <s>27</s> 29 31 <s>33</s> 35 37 <s>39</s> 41 43 <s>45</s> 47 49 <s>51</s> ...</code>
</ul>
<ul>
<li>Візьміть перший член результатного масиву як наступне ігрове число <span style='color:blue;font-weight:bold'>5</span>.</li>
<li>Видаліть кожен <strong>5<sup>й</sup></strong> пронумерований абзац із масиву (включно з першим).</li>
<code style='margin-left: 2em;'><span style='color:blue;font-weight:bold'><s>5</s></span> 7 11 13 17 <s>19</s> 23 25 29 31 <s>35</s> 37 41 43 47 <s>49</s> 53 55 59 61 <s>65</s> 67 71 73 77 ...</code>
</ul>
<ul>
<li>Візьміть перший член результатного масиву як наступне ігрове число <span style='color:blue;font-weight:bold'>7</span>.</li>
<li>Видаліть кожен <strong>7<sup>й</sup></strong> пронумерований абзац із масиву (включно з першим).</li>
<code style='margin-left: 2em;'><span style='color:blue;font-weight:bold'><s>7</s></span> 11 13 17 23 25 29 <s>31</s> 37 41 43 47 53 55 <s>59</s> 61 67 71 73 77 83 <s>85</s> 89 91 97 ...</code>
</ul>
<ul>
<li><big><b> ... </b></big></li>
<li>Візьміть перший член поточного масиву як наступне ігрове число<span style='color:blue;font-weight:bold'>L</span>.</li>
<li>Видаліть кожен <strong>L<sup>й</sup></strong> пронумерований абзац із масиву (включно з першим).</li>
<li><big><b> ... </b></big></li>
</ul>
# --instructions--
Запишіть функцію, яка повертає всі ігрові числа, які є меншими або дорівнюють даному числу.
# --hints--
`ludic` має бути функцією.
```js
assert(typeof ludic === 'function', '<code>ludic</code> should be a function.');
```
`ludic(2)` має повернути масив.
```js
assert(Array.isArray(ludic(2)));
```
`ludic(2)` має повернути `[1, 2]`.
```js
assert.deepEqual(ludic(2), [1, 2]);
```
`ludic(3)` має повернути `[1, 2, 3]`.
```js
assert.deepEqual(ludic(3), [1, 2, 3]);
```
`ludic(5)` має повернути `[1, 2, 3, 5]`.
```js
assert.deepEqual(ludic(5), [1, 2, 3, 5]);
```
`ludic(20)` має повернути `[1, 2, 3, 5, 7, 11, 13, 17]`.
```js
assert.deepEqual(ludic(20), [1, 2, 3, 5, 7, 11, 13, 17]);
```
`ludic(26)` має повернути `[1, 2, 3, 5, 7, 11, 13, 17, 23, 25]`.
```js
assert.deepEqual(ludic(26), [1, 2, 3, 5, 7, 11, 13, 17, 23, 25]);
```
# --seed--
## --seed-contents--
```js
function ludic(n) {
}
```
# --solutions--
```js
function ludic(n) {
const makeArr = (s, e) => new Array(e + 1 - s).fill(s).map((e, i) => e + i);
const filterAtInc = (arr, n) => arr.filter((e, i) => (i + 1) % n);
const makeLudic = (arr, result) => {
const iter = arr.shift();
result.push(iter);
return arr.length ? makeLudic(filterAtInc(arr, iter), result) : result;
};
const ludicResult = makeLudic(makeArr(2, n), [1]);
return ludicResult;
}
```