Files

2.6 KiB
Raw Permalink Blame History

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
a3f503de51cfab748ff001aa Парність 5 301617 pairwise

--description--

У масиві arr, знайдіть пари елементів, сума яких рівняється другому аргументу arg і поверніть суму їх індексів.

Ви можете використовувати декілька пар, які мають однакові числові елементи, але різні індекси. У кожній парі варто використовувати найнижчі доступні індекси. Після того, як елемент було використано, його вже не можна використати для пари з іншим елементом. Наприклад, pairwise([1, 1, 2], 3) створює пару [2, 1], де 1 має індекс 0, а не 1, оскільки 0+2 < 1+2.

Наприклад, pairwise([7, 9, 11, 13, 15], 20) повертає 6. Пара з сумою 20 буде [7, 13] and [9, 11]. Тепер ми можемо записати масив з їхніми індексами і значеннями.

Індекс 0 1 2 3 4
Значення 7 9 11 13 15

Нижче ми беремо відповідні індекси і додаємо.

7 + 13 = 20 → Індекси 0 + 3 = 3
9 + 11 = 20 → Індекси 1 + 2 = 3
3 + 3 = 6 → Повертає 6

--hints--

pairwise([1, 4, 2, 3, 0, 5], 7) має повернути 11.

assert.deepEqual(pairwise([1, 4, 2, 3, 0, 5], 7), 11);

pairwise([1, 3, 2, 4], 4) має повернути 1.

assert.deepEqual(pairwise([1, 3, 2, 4], 4), 1);

pairwise([1, 1, 1], 2) має повернути 1.

assert.deepEqual(pairwise([1, 1, 1], 2), 1);

pairwise([0, 0, 0, 0, 1, 1], 1) має повернути 10.

assert.deepEqual(pairwise([0, 0, 0, 0, 1, 1], 1), 10);

pairwise([], 100) має повернути 0.

assert.deepEqual(pairwise([], 100), 0);

--seed--

--seed-contents--

function pairwise(arr, arg) {
  return arg;
}

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

--solutions--

function pairwise(arr, arg) {
  var sum = 0;
  arr.forEach(function(e, i, a) {
    if (e != null) {
      var diff = arg-e;
      a[i] = null;
      var dix = a.indexOf(diff);
      if (dix !== -1) {
        sum += dix;
        sum += i;
        a[dix] = null;
      }
    }
  });
  return sum;
}

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