RosettaCodeData/Task/Perfect-numbers/JavaScript/perfect-numbers-8.js

26 lines
626 B
JavaScript
Raw Permalink Normal View History

2019-09-12 10:33:56 -07:00
(() => {
const main = () =>
enumFromTo(1, 10000).filter(perfect);
2016-12-05 22:15:40 +01:00
// perfect :: Int -> Bool
2019-09-12 10:33:56 -07:00
const perfect = n => {
const
lows = enumFromTo(1, Math.floor(Math.sqrt(n)))
.filter(x => (n % x) === 0);
2016-12-05 22:15:40 +01:00
2019-09-12 10:33:56 -07:00
return n > 1 && lows.concat(lows.map(x => n / x))
.reduce((a, x) => (a + x), 0) / 2 === n;
};
2016-12-05 22:15:40 +01:00
2019-09-12 10:33:56 -07:00
// GENERIC --------------------------------------------
2016-12-05 22:15:40 +01:00
2019-09-12 10:33:56 -07:00
// enumFromTo :: Int -> Int -> [Int]
const enumFromTo = (m, n) =>
Array.from({
length: n - m + 1
}, (_, i) => i + m)
2016-12-05 22:15:40 +01:00
2019-09-12 10:33:56 -07:00
// MAIN ---
return main();
})();