Files
freeCodeCamp/curriculum/challenges/ukrainian/22-rosetta-code/rosetta-code-challenges/vector-dot-product.md
2024-01-24 19:52:36 +01:00

2.2 KiB
Raw Blame History

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

--description--

A vector can have one or more values represented by an ordered collection. Examples could be (x), (x, y), or (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;
}