freeCodeCamp/curriculum/challenges/ukrainian/10-coding-interview-prep/rosetta-code/vector-dot-product.md

2.3 KiB
Raw Blame History

id title challengeType forumTopicId dashedName
594810f028c0303b75339ad3 Скалярний добуток векторів 1 302343 vector-dot-product

--description--

Вектор може мати один або декілька значень, позначених впорядкованим набором чисел. Наприклад, (x), (x, y) або (x, y, z).

--instructions--

Напишіть функцію, що приймає два вектори (представлені як одновимірні масиви) як вхідні дані та обчислює їхній скалярний добуток. Ваша функція має повернути null при недопустимих вхідних даних (наприклад, вектори різної довжини), або коли замість двох векторів приходять інші дані.

--hints--

dotProduct має бути функцією.

assert.equal(typeof dotProduct, 'function');

dotProduct() має повернути null.

assert.equal(dotProduct(), null);

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

assert.equal(dotProduct([1], [1]), 1);

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

assert.equal(dotProduct([1], [1, 2]), null);

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

assert.equal(dotProduct([1, 3, -5], [4, -2, -1]), 3);

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

assert.equal(dotProduct([3, 2, 1], [2, 4, 2], [5, 3, 1]), null);

dotProduct([ 0, 3, 6, 9, 12 ], [ 0, 4, 8, 12, 16 ]) має повернути 360.

assert.equal(dotProduct([ 0, 3, 6, 9, 12 ], [ 0, 4, 8, 12, 16 ]), 360);

--seed--

--seed-contents--

function dotProduct(...vectors) {

}

--solutions--

function dotProduct(...vectors) {
  if (!vectors || !vectors.length || vectors.length > 2 || vectors[0].length !== vectors[1].length) {
    return null;
  }
  const vectorLen = vectors[0].length;

  let prod = 0;
  let sum = 0;
  let j = vectorLen;
  let i = 2;
  // Sum terms
  while (j--) {
    i = 2;
    prod = 1;

    while (i--) {
      prod *= vectors[i][j];
    }
    sum += prod;
  }
  return sum;
}