--- 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 から開始し、増加していく整数の配列を作成します。 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ... (ループ) # --instructions-- 与えられた数値以下のすべてのルディック数を返す関数を記述してください。 # --hints-- `ludic` は関数とします。 ```js assert(typeof ludic === 'function', 'ludic 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; } ```