* feat(tools): add seed/solution restore script * chore(curriculum): remove empty sections' markers * chore(curriculum): add seed + solution to Chinese * chore: remove old formatter * fix: update getChallenges parse translated challenges separately, without reference to the source * chore(curriculum): add dashedName to English * chore(curriculum): add dashedName to Chinese * refactor: remove unused challenge property 'name' * fix: relax dashedName requirement * fix: stray tag Remove stray `pre` tag from challenge file. Signed-off-by: nhcarrigan <nhcarrigan@gmail.com> Co-authored-by: nhcarrigan <nhcarrigan@gmail.com>
2.0 KiB
id, title, challengeType, forumTopicId, dashedName
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
5a23c84252665b21eecc7ee0 | Left factorials | 5 | 302302 | left-factorials |
--description--
Left factorials, !n
, may refer to either subfactorials or to factorial sums. The same notation can be confusingly seen used for the two different definitions. Sometimes, subfactorials (also known as derangements) may use any of the notations:
- $!n`$
- $!n$
- $n¡$
(It may not be visually obvious, but the last example uses an upside-down exclamation mark.) This task will be using this formula for left factorial:
!n = \\sum\_{k=0}^{n-1} k!
where !0 = 0
--instructions--
Write a function to calculate the left factorial of a given number.
--hints--
leftFactorial
should be a function.
assert(typeof leftFactorial == 'function');
leftFactorial(0)
should return a number.
assert(typeof leftFactorial(0) == 'number');
leftFactorial(0)
should return 0
.
assert.equal(leftFactorial(0), 0);
leftFactorial(1)
should return 1
.
assert.equal(leftFactorial(1), 1);
leftFactorial(2)
should return 2
.
assert.equal(leftFactorial(2), 2);
leftFactorial(3)
should return 4
.
assert.equal(leftFactorial(3), 4);
leftFactorial(10)
should return 409114
.
assert.equal(leftFactorial(10), 409114);
leftFactorial(17)
should return 22324392524314
.
assert.equal(leftFactorial(17), 22324392524314);
leftFactorial(19)
should return 6780385526348314
.
assert.equal(leftFactorial(19), 6780385526348314);
--seed--
--seed-contents--
function leftFactorial(n) {
}
--solutions--
function leftFactorial(n) {
if (n == 0) return 0;
if (n == 1) return 1;
// Note: for n>=20, the result may not be correct.
// This is because JavaScript uses 53 bit integers and
// for n>=20 result becomes too large.
let res = 2,
fact = 2;
for (var i = 2; i < n; i++) {
res += fact;
fact *= i + 1;
}
return res;
}