Files
freeCodeCamp/curriculum/challenges/english/08-coding-interview-prep/rosetta-code/ludic-numbers.md
Bhanu Pratap Singh Rathore 1fc55513a4 feat(interview-prep): Converting and Transfering Rosetta problems (#38624)
* feat(interview-prep): Converting and Transfering Rosetta problems

* feat(interview-prep): Meta fix

* fix: adjusted descriptions and some test cases

* fix: Descriptions fixed

Co-authored-by: Kris Koishigawa <scissorsneedfoodtoo@gmail.com>
2020-05-05 18:52:32 +09:00

4.7 KiB

id, title, challengeType
id title challengeType
5ea281203167d2b0bdefca00 Ludic numbers 5

Description

Ludic numbers are related to prime numbers as they are generated by a sieve quite like the Sieve of Eratosthenes is used to generate prime numbers. The first ludic number is 1. To generate succeeding ludic numbers create an array of increasing integers starting from 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 ... (Loop)
  • Take the first member of the resultant array as the next ludic number 2.
  • Remove every 2nd indexed item from the array (including the first).
  • 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 ...
  • (Unrolling a few loops...)
  • Take the first member of the resultant array as the next ludic number 3.
  • Remove every 3rd indexed item from the array (including the first).
  • 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 ...
  • Take the first member of the resultant array as the next ludic number 5.
  • Remove every 5th indexed item from the array (including the first).
  • 5 7 11 13 17 19 23 25 29 31 35 37 41 43 47 49 53 55 59 61 65 67 71 73 77 ...
  • Take the first member of the resultant array as the next ludic number 7.
  • Remove every 7th indexed item from the array (including the first).
  • 7 11 13 17 23 25 29 31 37 41 43 47 53 55 59 61 67 71 73 77 83 85 89 91 97 ...
  • ...
  • Take the first member of the current array as the next ludic number L.
  • Remove every Lth indexed item from the array (including the first).
  • ...

Instructions

Write a function that returns all the ludic numbers less than or equal to the given number.

Tests

tests:
  - text: <code>ludic</code> should be a function.
    testString: assert(typeof ludic === 'function', '<code>ludic</code> should be a function.');
  - text: <code>ludic(2)</code> should return a array.
    testString: assert(Array.isArray(ludic(2)));
  - text: <code>ludic(2)</code> should return <code>[1, 2]</code>.
    testString: assert.deepEqual(ludic(2), [1, 2]);
  - text: <code>ludic(3)</code> should return <code>[1, 2, 3]</code>.
    testString: assert.deepEqual(ludic(3), [1, 2, 3]);
  - text: <code>ludic(5)</code> should return <code>[1, 2, 3, 5]</code>.
    testString: assert.deepEqual(ludic(5), [1, 2, 3, 5]);
  - text: <code>ludic(20)</code> should return <code>[1, 2, 3, 5, 7, 11, 13, 17]</code>.
    testString: assert.deepEqual(ludic(20), [1, 2, 3, 5, 7, 11, 13, 17]);
  - text: <code>ludic(26)</code> should return <code>[1, 2, 3, 5, 7, 11, 13, 17, 23, 25]</code>.
    testString: assert.deepEqual(ludic(26), [1, 2, 3, 5, 7, 11, 13, 17, 23, 25]);

Challenge Seed

function ludic(n) {
  
}

Solution

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