RosettaCodeData/Task/Sum-multiples-of-3-and-5/JavaScript/sum-multiples-of-3-and-5-7.js
2017-09-25 22:28:19 +02:00

36 lines
964 B
JavaScript

(() => {
// Area under straight line
// between first multiple and last.
// sumMults :: Int -> Int -> Int
const sumMults = (n, factor) => {
const n1 = quot(n - 1, factor);
return quot(factor * n1 * (n1 + 1), 2);
};
// sum35 :: Int -> Int
const sum35 = n => sumMults(n, 3) + sumMults(n, 5) - sumMults(n, 15);
// GENERIC ----------------------------------------------------------------
// enumFromTo :: Int -> Int -> [Int]
const enumFromTo = (m, n) =>
Array.from({
length: Math.floor(n - m) + 1
}, (_, i) => m + i);
// Integral a => a -> a -> a
const quot = (n, m) => Math.floor(n / m);
// TEST -------------------------------------------------------------------
// Sums for 10^1 thru 10^8
return enumFromTo(1, 8)
.map(n => Math.pow(10, n))
.reduce((a, x) => (
a[x.toString()] = sum35(x),
a
), {});
})();