Munchausen numbers: Difference between revisions

Content added Content deleted
(Add Swift)
Line 896: Line 896:
Or, composing reusable primitives:
Or, composing reusable primitives:


<lang JavaScript>(function () {
<lang JavaScript>(() => {
'use strict';
'use strict';

const main = () =>
filter(isMunchausen, enumFromTo(1, 5000));


// isMunchausen :: Int -> Bool
// isMunchausen :: Int -> Bool
let isMunchausen = n =>
const isMunchausen = n =>
!isNaN(n) && (
!isNaN(n) && (
n.toString()
n.toString()
.split('')
.split('')
.reduce((a, c) => {
.reduce((a, c) => {
let d = parseInt(c, 10);
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 -> Maybe Int -> [Int]
}, 0) === 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) =>
Array.from({
length: 1 + n - m
}, (_, i) => m + i);


// filter :: (a -> Bool) -> [a] -> [a]
return range(1, 5000)
.filter(isMunchausen);
const filter = (f, xs) => xs.filter(f);

})();</lang>




// MAIN ---
return main();
})();</lang>
{{Out}}
{{Out}}
<lang JavaScript>[1, 3435]</lang>
<lang JavaScript>[1, 3435]</lang>