re: Write a program or script to find Lucky Numbers VIEW POST

TOP OF THREAD FULL DISCUSSION
re: Fine! This runs in about 19s on my Notebook. splice() works in place. filter() generates a copy and is an additional loop. So I thought working out...
 

Sorry about deleting my comment, I totally broke my code

So I changed the .splice(j-1, 1, 0) to a direct array access and fixed the j offset, making it 2x faster

function getLuckyNumbersTo(n, d=false) {
    const start = Date.now();
    let lucky = new Array(n).fill(0).map((v,i) => i+1);
    if (d) console.log(lucky);
    for (let i = 2; i < lucky.length;) {
        for (let j = i; j <= lucky.length; j+=i) {
            lucky[j-1] = 0;
        }
        if (d) console.log(i, lucky.map(v => v));
        lucky = lucky.filter(v => v !== 0);
        i = lucky.find(v => v >= i + 1);
    }
    const end = Date.now();
    const duration = end - start;
    console.table({ size:n, length:lucky.length, time:duration });
    console.log(lucky);
    return lucky;
}
code of conduct - report abuse