mirror of
https://github.com/freeCodeCamp/freeCodeCamp.git
synced 2026-05-07 15:03:20 -04:00
2.2 KiB
2.2 KiB
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;
}