Munchausen numbers: Difference between revisions

Content added Content deleted
(Add Swift)
Line 896:
Or, composing reusable primitives:
 
<lang JavaScript>(function () => {
'use strict';
 
const main = () =>
filter(isMunchausen, enumFromTo(1, 5000));
 
// isMunchausen :: Int -> Bool
letconst isMunchausen = n =>
!isNaN(n) && (
n.toString()
.split('')
.reduce((a, c) => {
let d = parseInt(c, 10);
return a + Math.pow(d, d);
}, 0) === n
),
 
return a + Math.pow(d, d);
// range(intFrom, intTo, intStep?)
// Int -> Int ->}, Maybe0) Int=== -> [Int]n
range = (m, n, step) => {;
let d = (step || 1) * (n >= m ? 1 : -1);
 
// GENERIC ---------------------------
return Array.from({
length: Math.floor((n - m) / d) + 1
}, (_, i) => m + (i * d));
};
 
// enumFromTo :: Int -> Int -> [Int]
const enumFromTo = (m, n) =>
return Array.from({
length: 1 + n },- 0) === nm
}, (_, i) => m + i),;
 
// filter :: (a -> Bool) -> [a] -> [a]
return range(1, 5000)
const filter = (f, xs) => xs.filter(isMunchausenf);
 
})();</lang>
 
 
// MAIN ---
return rangemain(1, 5000);
})();</lang>
{{Out}}
<lang JavaScript>[1, 3435]</lang>