я не понимаю, что происходит с этим кодом

#javascript

Вопрос:

Вам дается массив положительных целых чисел. Хотя массив содержит более одного элемента, вы можете выбрать два элемента и заменить их суммой или произведением.

Ваша задача-найти максимально возможное число, которое может остаться в массиве после нескольких таких операций.

Пример Для arr = [1, 3, 2], результат должен быть 9.

чтобы максимизировать ответ, первая операция будет 1 2 (массив изменяется на [3, 3]), а следующая 3 * 3 (массив изменяется на [9]), поэтому конечный результат равен 9.

 function sumOrProduct(arr) {
  if(arr.length == 1) return arr[0];
     arr = arr.sort();
  if(arr[0] == 1){
    if(arr.indexOf(2) == -1) arr.push(arr.shift()   arr.shift())
  else arr.push(arr.shift()   arr.splice(arr.indexOf(2),1)[0])
 }else arr.push(arr.shift() * arr.shift())
  return sumOrProduct(arr)
}
 

я не понимаю этой части и почему он использует там вахтовый метод.

 if(arr[0] == 1){
if(arr.indexOf(2) == -1) arr.push(arr.shift()   arr.shift())
else arr.push(arr.shift()   arr.splice(arr.indexOf(2),1)[0])
}else arr.push(arr.shift() * arr.shift())
 

Комментарии:

1. Если длина массива не определена, это скорее математическая проблема, чем проблема программирования, поскольку не так просто определить все возможные события с помощью методов, подобных брутфорсу

Ответ №1:

Это интересный вопрос, но, похоже, решение состоит в том, чтобы if there's 1, add it to the next lowest number, then multiply all the others

 function sumOrProduct(arr){
  arr.sort((a,b)=>a-b)
  var num=arr[0]
  for(let i=1;i<arr.length;i  ){
    if(num==1){num =arr[i]}
    else{num*=arr[i]}
  }
  return num||0
}

console.log( sumOrProduct([1,2,3]) )
console.log( sumOrProduct([1,3,2]) )
console.log( sumOrProduct([1,5,3,2,4]) ) 

Что делает сдвиг, он проходит по массиву с пользовательской начальной точкой(например, a for loop ), за исключением того, что он не использует a for loop и использует рекурсию и сдвиг для извлечения значений из массива, чтобы одно и то же число не обрабатывалось. Относительно того, почему это усложнение было сделано вместо использования цикла for? Я думаю, что человек ненавидит за петли ;-;