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

1.9 KiB

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
594810f028c0303b75339ad3 Vektorpunktprodukt 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--

Schreibe eine Funktion, die zwei Vektoren (dargestellt als eindimensionale Anordnungen) als Eingabe nimmt und ihr Punktprodukt berechnet. Deine Funktion sollte null bei ungültigen Eingaben zurückgeben, z. B. bei Vektoren unterschiedlicher Länge oder bei Übergabe von etwas anderem als zwei Vektoren.

--hints--

dotProduct sollte eine Funktion sein.

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

dotProduct() sollte null zurückgeben.

assert.equal(dotProduct(), null);

dotProduct([1], [1]) sollte 1 zurückgeben.

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

dotProduct([1], [1, 2]) sollte null zurückgeben.

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

dotProduct([1, 3, -5], [4, -2, -1]) sollte 3 zurückgeben.

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

dotProduct([3, 2, 1], [2, 4, 2], [5, 3, 1]) sollte null zurückgeben.

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

dotProduct([ 0, 3, 6, 9, 12 ], [ 0, 4, 8, 12, 16 ]) sollte 360 zurückgeben.

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;
}