RangeError в реализации простого гэпа Codewars - PullRequest
0 голосов
/ 12 апреля 2020

Итак, у меня есть готовый код для задачи с пропусками простых чисел в кодовых войнах, но когда я его выполняю, я получаю ошибку: иногда положительных результатов больше, чем при предыдущей проверке, поэтому я не уверен, как ее решить, может быть, это проблема с оптимизацией, но я уверен, что так довольно быстро

RangeError: Invalid array length at primeSieve at gap at /home/codewarrior/index.js:113:32 at begin at Object.it at /home/codewarrior/index.js:112:14 at /runner/frameworks/javascript/cw-2.js:152:11 at Promise._execute at Promise._resolveFromExecutor at new Promise at Object.describe at /home/codewarrior/index.js:60:6 at /home/codewarrior/index.js:125:5 at Object.handleError

Вот мой код:

function gap(g, m, n) {
let arr = [];
let arr2 = [];
function primeSieve(n){
var a = Array(n = n/2),
   t = (Math.sqrt(4+8*n)-2)/4,
   u = 0,
   r = [];
for(var i = 1; i < (n-1)/3; i++) a[1+3*i] = true;
for(var i = 2; i <= t; i++){
 u = (n-i)/(1+2*i);
 if (i%3-1) for(var j = i; j < u; j++) a[i + j + 2*i*j] = true;
}
for(var i = 0; i< n; i++) !a[i] && r.push(i*2+1);
return r;
}
arr2 = primeSieve(n);
arr = arr2.filter(num=>(num >= m) && (num <= n));
for(let i = 0;i<=arr.length;i++){
  let nextValue = i+1;
    if(arr[nextValue] - arr[i] === g){
     return [arr[i],arr[nextValue]]
    } 
}

return null;
}

1 Ответ

0 голосов
/ 13 апреля 2020
var a = Array(n = n/2)

Если n нечетно, вы создаете массив с нецелой длиной, которая объясняет RangeError: Invalid array length

Это можно решить с помощью parseInt, который округляет число с плавающей точкой вниз до ближайшего целого числа.

var a = Array(n = parseInt(n/2))
...