2.3 KiB
id, title, challengeType, forumTopicId, dashedName
| id | title | challengeType | forumTopicId | dashedName |
|---|---|---|---|---|
| 5a23c84252665b21eecc7e05 | CUSIP | 1 | 302241 | cusip |
--description--
Eine CUSIP ist ein neunstelliger alphanumerischer Code, der ein nordamerikanisches Finanzpapier zum Zwecke der Erleichterung des Clearings und der Abwicklung von Geschäften identifiziert. The CUSIP was adopted as an American National Standard under Accredited Standards X9.6.
--instructions--
Write a function that takes a string as a parameter and checks if the string is valid CUSIP.
--hints--
isCusip sollte eine Funktion sein.
assert(typeof isCusip == 'function');
isCusip("037833100") sollte einen Boolean zurückgeben.
assert(typeof isCusip('037833100') == 'boolean');
isCusip("037833100") sollte true zurückgeben.
assert.equal(isCusip('037833100'), true);
isCusip("17275R102") sollte true zurückgeben.
assert.equal(isCusip('17275R102'), true);
isCusip("38259P50a") sollte false zurückgeben.
assert.equal(isCusip('38259P50a'), false);
isCusip("38259P508") sollte true zurückgeben.
assert.equal(isCusip('38259P508'), true);
isCusip("38259P50#") sollte false zurückgeben.
assert.equal(isCusip('38259P50#'), false);
isCusip("68389X105") sollte true zurückgeben.
assert.equal(isCusip('68389X105'), true);
isCusip("68389X106") sollte false zurückgeben.
assert.equal(isCusip('68389X106'), false);
isCusip("5949181") sollte false zurückgeben.
assert.equal(isCusip('5949181'), false);
--seed--
--seed-contents--
function isCusip(s) {
}
--solutions--
function isCusip(s) {
if (s.length != 9) return false;
var sum = 0;
var ASCII = x => x.charCodeAt(0);
for (var i = 0; i < 7; i++) {
var c = s.charCodeAt(i);
var v;
if (c >= ASCII('0') && c <= ASCII('9')) {
v = c - 48;
} else if (c >= ASCII('A') && c <= ASCII('Z')) {
v = c - 64; // lower case letters apparently invalid
} else if (c == ASCII('*')) {
v = 36;
} else if (c == ASCII('@')) {
v = 37;
} else if (c == ASCII('#')) {
v = 38;
} else {
return false;
}
if (i % 2 == 1) v *= 2; // check if odd as using 0-based indexing
sum += Math.floor(v / 10) + (v % 10);
}
return s.charCodeAt(8) - 48 == (10 - (sum % 10)) % 10;
}