Задача на Codewars

182
18 февраля 2019, 13:30

https://www.codewars.com/kata/sum-of-differences-in-array/train/javascript

мой способ решения:

function sumOfDifferences(arr) {
  let arrR = arr.reverse();
  let num = 0;
  for(let i = 0; i < arrR.length; i++) {
    if(i == arr.length-1){break}
    num = num +(arrR[i]-arrR[i+1])
  }
  return num;
}

28 правильно, 80 не правильно, в чем собственно проблема?

https://www.codewars.com/kata/sum-of-differences-in-array/train/javascript

Your task is to sum the differences between consecutive pairs in the array in descending order.

For example: sumOfDifferences([1, 2, 10] Returns 9

Descending order: [10, 2, 1]

Sum: (10 - 2) + (2 - 1) = 8 + 1 = 9

If the array is empty or the array has only one element the result should be 0.

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

например: sumOfDifferences([1, 2, 10] вернёт 9

В порядке убывания: [10, 2, 1]

Сум: (10 - 2) + (2 - 1) = 8 + 1 = 9

Если массив пуст или массив имеет только один элемент, результат должен быть 0.

Answer 1

arr.reverse(); недостаточно - ведь массив не всегда будет сортирован по возрастанию, так что нужно самому отсортировать

Если маленько подумать, то цикл не нужен - всё сократится, и достаточно вот чего:

    function sumOfDifferences(arr) {
      if (arr.length<2)
        return 0;
      arrS = arr.sort(function(a,b){return a-b;});
      return arrS[arrS.length - 1] - arrS[0];
    }

Или вообще без сортировки:

  return Math.max.apply(null, arr) - Math.min.apply(null, arr);
Answer 2

Q: в чем собственно проблема?

A: в порядке убывания

решение

let sumOfDifferences = arr => arr.length < 2
    ? 0
    : arr
        .sort((a, b) => b - a)
        .map((v, i, a) => (void 0 === a[i + 1]) ? 0 : v - a[i + 1])
        .reduce((res, val, i, arr) => res + val, 0)
Answer 3

Очень простой код. Если длина массива меньше 2 — тоже работает.

function res (input) { 
  let result = 0 
 
  input.slice(1).forEach((item, i) =>  
    result += input[i] - item 
  ) 
   
  return Math.abs(result) 
} 
 
console.log(res([1, 2, 10])) 
console.log(res([5]))

READ ALSO
связка Node.js + MongoDB

связка Node.js + MongoDB

Бот отказывается считывать/изменять данные в MongoDB, хотя новые документы без проблем создаетhttps://gist

123
${abbr} заменить текствым значением

${abbr} заменить текствым значением

Подскажите,пожалуйста,как сделать чтоб вместо ${abbr} появился текст "css"?

114
Функция getSelection не работает iOS 12

Функция getSelection не работает iOS 12

Функции documentgetSelection() и window

127
WEB API - Аналог CreateElement

WEB API - Аналог CreateElement

Когда-то, где-то, читал про API, которое является аналогом documentcreateElement - не могу ни вспомнить название, ни найти, а гугл выдает тонны информации...

131