Javascript 带素数检查的三角形中的最大路径和

Javascript 带素数检查的三角形中的最大路径和,javascript,arrays,algorithm,Javascript,Arrays,Algorithm,我被赋予这个算法任务: 您将在下面输入一个三角形,您需要根据下面给定的规则找到数字的最大和 您将从顶部开始,向下移动到相邻的数字,如下图所示 您只能向下和斜向行走 您只能遍历非素数 你必须尽可能多地到达金字塔的尽头 1 8 4 2 6 9 8 5 9 3 正如你所看到的,这有几个符合非素数规则的路径;1>8>6>9, 1>4>6>9, 1>4>9>9 1 + 8 + 6 + 9 = 24. 正如你看到的,1,8,6

我被赋予这个算法任务:

您将在下面输入一个三角形,您需要根据下面给定的规则找到数字的最大和

您将从顶部开始,向下移动到相邻的数字,如下图所示

您只能向下和斜向行走

您只能遍历非素数

你必须尽可能多地到达金字塔的尽头

           1
          8 4
        2  6  9
      8  5  9  3
正如你所看到的,这有几个符合非素数规则的路径;1>8>6>9, 1>4>6>9, 1>4>9>9 1 + 8 + 6 + 9 = 24. 正如你看到的,1,8,6,9都不是素数,遍历这些得到最大和

根据以上规则,以下输入的最大和是多少?这意味着请将此金字塔作为实现的输入(作为文件或代码中的常量),并使用它进行求解

                              215
                           193 124
                         117 237 442
                       218 935 347 235
                     320 804 522 417 345
                   229 601 723 835 133 124
                 248 202 277 433 207 263 257
               359 464 504 528 516 716 871 182
             461 441 426 656 863 560 380 171 923
           381 348 573 533 447 632 387 176 975 449
         223 711 445 645 245 543 931 532 937 541 444
       330 131 333 928 377 733 017 778 839 168 197 197
    131 171 522 137 217 224 291 413 528 520 227 229 928
  223 626 034 683 839 053 627 310 713 999 629 817 410 121
924 622 911 233 325 139 721 218 253 223 107 233 230 124 233
请注意,这里每个节点只有两个子节点(最下面的子节点除外)。例如,您可以从215走到124(因为193是素数),然后从124走到237或442。你不能从124转到117,因为它不是124的直系子女

    const isNotPrime = (num) => {
      for (let i = 2; i <= Math.sqrt(num); i++) {
      if (num % i === 0) return true;
      }
      return false;
      }

    function maximumTrianglePathSum(triangle) {

        function distilLastLine() {
          let lastLine = triangle.pop(),
              aboveLine = triangle.pop()
          for (let i = 0; i < aboveLine.length; i++)
          if(isNotPrime(lastLine[i]) && isNotPrime(lastLine[i + 1])){
            aboveLine[i] = Math.max(
              aboveLine[i] + lastLine[i],
              aboveLine[i] + lastLine[i + 1]
            )
          }else if(isNotPrime(lastLine[i]) && !isNotPrime(lastLine[i + 1]) ) {
            aboveLine[i] = aboveLine[i] + lastLine[i]
          }else if(!isNotPrime(lastLine[i]) && isNotPrime(lastLine[i + 1]) ){
            aboveLine[i] = aboveLine[i] + lastLine[i + 1]
          }
          triangle.push(aboveLine)
        }

        do {
          distilLastLine()
        } while (triangle.length > 1)
        return triangle[0][0]
      }

      // testing
      const myArray = [[1],
      [8, 4],
      [2, 6, 9], 
      [8, 5, 9, 3]]
      let theTriangle = [[215],
      [193, 124],
      [117, 237, 442],
      [218, 935, 347, 235],
      [320, 804, 522, 417, 345],
      [229, 601, 723, 835, 133, 124],
      [248, 202, 277, 433, 207, 263, 257],
      [359, 464, 504, 528, 516, 716, 871, 182],
      [461, 441, 426, 656, 863, 560, 380, 171, 923],
      [381, 348, 573, 533, 447, 632, 387, 176, 975, 449],
      [223, 711, 445, 645, 245, 543, 931, 532, 937, 541, 444],
      [330, 131, 333, 928, 377, 733, 17, 778, 839, 168, 197, 197],
      [131, 171, 522, 137, 217, 224, 291, 413, 528, 520, 227, 229, 928],
      [223, 626, 34, 683, 839, 53, 627, 310, 713, 999, 629, 817, 410, 121],
      [924, 622, 911, 233, 325, 139, 721, 218, 253, 223, 107, 233, 230, 124, 233]]

      console.log(maximumTrianglePathSum(myArray))
      console.log(maximumTrianglePathSum(theTriangle))
const isNotPrime=(num)=>{
for(设i=2;i=1)
返回三角形[0][0]
}
//测试
常量myArray=[[1],
[8, 4],
[2, 6, 9], 
[8, 5, 9, 3]]
让三角形=[[215],
[193, 124],
[117, 237, 442],
[218, 935, 347, 235],
[320, 804, 522, 417, 345],
[229, 601, 723, 835, 133, 124],
[248, 202, 277, 433, 207, 263, 257],
[359, 464, 504, 528, 516, 716, 871, 182],
[461, 441, 426, 656, 863, 560, 380, 171, 923],
[381, 348, 573, 533, 447, 632, 387, 176, 975, 449],
[223, 711, 445, 645, 245, 543, 931, 532, 937, 541, 444],
[330, 131, 333, 928, 377, 733, 17, 778, 839, 168, 197, 197],
[131, 171, 522, 137, 217, 224, 291, 413, 528, 520, 227, 229, 928],
[223, 626, 34, 683, 839, 53, 627, 310, 713, 999, 629, 817, 410, 121],
[924, 622, 911, 233, 325, 139, 721, 218, 253, 223, 107, 233, 230, 124, 233]]
console.log(maximumTrianglePathSum(myArray))
console.log(最大三角形路径(三角形))
实际上,在第一个例子中,它打印的是23而不是24,最大路径是24


谁能帮我检查一下代码,看看有什么问题。

似乎有几个问题

首先,isNotPrime(1)=False,但1不是质数

第二,如果lastLine[i]是素数,那么函数divertastline禁止遍历节点。但是,lastLine[i]包含从该节点开始的最大和(即,不是三角形中的原始值,而是修改后的值)。

const isPrime=(num)=>{
for(设i=2;i*i=0;--k){
设currentLine=三角形[k];
for(设i=0;iconsole.log(最大三角形路径(三角形))第一:缓存
isNotPrime()
的结果第二:您忘记了
lastLine[i-1]
将此lastLine[i-1]放在何处。非常感谢您的帮助,但有一个问题,我们只有两个选项,而不是您在描述中看到的3个选项。请注意,这里每个节点只有两个子节点(最下面的子节点除外)。例如,您可以从215走到124(因为193是素数),然后从124走到237或442。从124不能到117,因为它不是124的直接孩子。@Iam3y但你的问题是
向下
对角
。不要走得太远。。参见索引。。对于索引
1
,可用的选项有
0
1
2
,其中
0
2
是对角选项,那么为什么在第一个示例中没有类似于1的路径呢