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

2.1 KiB

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
59d9c6bc214c613ba73ff012 SEDOLs 1 302305 sedols

--description--

SEDOL is a list of securities identification numbers issued by the London Stock Exchange.

Für jede Nummernliste der 6-stelligen SEDOL wird die Prüfziffer berechnet und angehängt. Das heißt, dass deine Funktion bei der Eingabe der Zeichenfolge auf der linken Seite die entsprechende Zeichenfolge auf der rechten Seite zurückgeben sollte:

710889 => 7108899
B0YBKJ => B0YBKJ7
406566 => 4065663
B0YBLH => B0YBLH2
228276 => 2282765
B0YBKL => B0YBKL9
557910 => 5579107
B0YBKR => B0YBKR5
585284 => 5852842
B0YBKT => B0YBKT7
B00030 => B000300

Prüfe, ob jede Eingabe korrekt geformt ist, insbesondere im Hinblick auf die zulässigen Zeichen in einer SEDOL-Zeichenfolge. Ihre Funktion sollte bei einer ungültigen Eingabe null zurückgeben.

--hints--

sedol sollte eine Funktion sein.

assert(typeof sedol === 'function');

sedol('a') sollte null zurückgeben.

assert(sedol('a') === null);

sedol('710889') sollte '7108899' zurückgeben.

assert(sedol('710889') === '7108899');

sedol('BOATER') sollte null zurückgeben.

assert(sedol('BOATER') === null);

sedol('228276') sollte '2282765' zurückgeben.

assert(sedol('228276') === '2282765');

--seed--

--seed-contents--

function sedol(input) {
  const checkSum = 0

  return checkSum;
}

--solutions--

function sedol(input) {
  const checkDigit = sedolCheckDigit(input);
  if (checkDigit !== null) {
    return input + checkDigit;
  }
  return null;
}

const weight = [1, 3, 1, 7, 3, 9, 1];
function sedolCheckDigit(char6) {
  if (char6.search(/^[0-9BCDFGHJKLMNPQRSTVWXYZ]{6}$/) === -1) {
    return null;
  }

  let sum = 0;
  for (let i = 0; i < char6.length; i++) {
    sum += weight[i] * parseInt(char6.charAt(i), 36);
  }
  const checkSum = (10 - (sum % 10)) % 10;
  return checkSum.toString();
}