Niklaus Wirth

Niklaus Wirth

Translate

(30)Pairwise

Pairwise
30-ый день программы "#100 Days Of Code"

Given an array arr, find element pairs whose sum equal the second argument arg and return the sum of their indices.

If multiple pairs are possible that have the same numeric elements but different indices, return the smallest sum of indices. Once an element has been used, it cannot be reused to pair with another.

For example pairwise([7, 9, 11, 13, 15], 20) returns 6. The pairs that sum to 20 are [7, 13] and [9, 11]. We can then write out the array with their indices and values.



Index01234
Value79111315


Below we'll take their corresponding indices and add them.

7 + 13 = 20 → Indices 0 + 3 = 3

9 + 11 = 20 → Indices 1 + 2 = 3

3 + 3 = 6 → Return 6



Создали пустой массив, куда будем добавлять наши номера. Отдельно создал переменную ответ

Исключили те случаи, когда наша функция должна вернуть 0 -пустой массив на входе pairwise([], 100) should return 0.

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

(arr[i]+arr[j]===arg&& sum.indexOf(i) ==-1 && sum.indexOf(j) ==-1)

В конце мы получаем сумму всех значений массива.

sum = answers.reduce(function(a,b){
    return a+b;
  });

И вернуть именно это значение!

Вообще то, я думаю, что переменная sum здесь лишняя. Можно было вполне обойтись и без нее. Но ... пока что я учусь и потому, оставил для наглядности :-) !

Here are some helpful links:



function pairwise(arr, arg) {
  var answers = [];
  var sum = 0;
  if(arr.length < 1){return 0;}
  for(var i = 0; i < arr.length; i++){
    for(var j = i + 1; j < arr.length; j++){
      if(arr[i] + arr[j]===arg && answers.indexOf(i)== -1 && answers.indexOf(j)== -1){
        answers.push(i,j);
      }
    }
  }
  sum = answers.reduce(function(a,b){
    return a + b;
  });
  return sum;
}

pairwise([1,4,2,3,0,5], 7);

Ответы:

pairwise([1, 4, 2, 3, 0, 5], 7)
return 11.

pairwise([1, 3, 2, 4], 4)
return 1.

pairwise([1, 1, 1], 2)
return 1.

pairwise([0, 0, 0, 0, 1, 1], 1)
return 10.

pairwise([], 100)
return 0.


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

Отправить комментарий