RosettaCodeData/Task/Happy-numbers/JavaScript/happy-numbers-2.js

26 lines
589 B
JavaScript

(() => {
'use strict';
// isHappy :: Int -> Bool
function isHappy(n) {
let f = n => n.toString()
.split('')
.reduce((a, x) => a + Math.pow(parseInt(x, 10), 2), 0),
p = (s, n) => n === 1 ? true : (
s.has(n) ? false : p(s.add(n), f(n))
);
return p(new Set(), n);
}
// TEST
// range :: Int -> Int -> [Int]
let range = (m, n) => Array.from({
length: Math.floor(n - m) + 1
}, (_, i) => m + i);
return range(1, 50)
.filter(isHappy)
.slice(0, 8);
})()