freeCodeCamp/curriculum/challenges/ukrainian/10-coding-interview-prep/rosetta-code/ludic-numbers.md

130 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
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;
}
```