Munchausen numbers: Difference between revisions
Content added Content deleted
(Added Lua version) |
(→{{header|JavaScript}}: Or, composing reusable primitives) |
||
Line 133: | Line 133: | ||
=={{header|JavaScript}}== |
=={{header|JavaScript}}== |
||
===ES6=== |
|||
<lang javascript>for (let i of [...Array(5000).keys()] |
<lang javascript>for (let i of [...Array(5000).keys()] |
||
.filter(n => n == n.toString().split('') |
.filter(n => n == n.toString().split('') |
||
Line 140: | Line 143: | ||
<pre>1 |
<pre>1 |
||
3435</pre> |
3435</pre> |
||
Or, composing reusable primitives: |
|||
<lang JavaScript>(function () { |
|||
'use strict'; |
|||
// isMunchausen :: Int -> Bool |
|||
let isMunchausen = n => |
|||
!isNaN(n) && ( |
|||
n.toString() |
|||
.split('') |
|||
.reduce(function (a, c) { |
|||
let d = parseInt(c, 10); |
|||
return a + Math.pow(d, d); |
|||
}, 0) === n |
|||
), |
|||
// range(intFrom, intTo, intStep?) |
|||
// Int -> Int -> Maybe Int -> [Int] |
|||
range = (m, n, step) => { |
|||
let d = (step || 1) * (n >= m ? 1 : -1); |
|||
return Array.from({ |
|||
length: Math.floor((n - m) / d) + 1 |
|||
}, (_, i) => m + (i * d)); |
|||
}; |
|||
return range(1, 5000) |
|||
.filter(isMunchausen); |
|||
})();</lang> |
|||
{{Out}} |
|||
<lang JavaScript>[1, 3435]</lang> |
|||
=={{header|Lua}}== |
=={{header|Lua}}== |