Perfect numbers: Difference between revisions
Content added Content deleted
Line 981: | Line 981: | ||
<lang JavaScript>(function (nFrom, nTo) { |
<lang JavaScript>(function (nFrom, nTo) { |
||
// MONADIC CHAIN (bind) IN LIEU OF FILTER |
|||
// ( monadic return for lists is just lambda x -> [x] ) |
|||
return chain( |
|||
rng(nFrom, nTo), |
|||
function (x) { |
|||
return ( |
|||
function perfect(n) { |
|||
return chain( |
|||
rng(1, Math.floor(Math.sqrt(n))), |
|||
function (y) { |
|||
return (n % y) === 0 && n > 1 ? [y, n / y] : []; |
|||
} |
|||
).reduce(function (a, x) { |
|||
return a + x; |
|||
}, 0) / 2 === n; |
|||
)(x) ? [x] : []; |
|||
} |
} |
||
); |
)(x) ? [x] : []; |
||
} |
|||
); |
|||
/******************************************************************/ |
|||
// Monadic bind (chain) for lists |
|||
function chain(xs, f) { |
|||
return [].concat.apply([], xs.map(f)); |
|||
} |
|||
function rng(m, n) { |
|||
return Array.apply(null, Array(n - m + 1)).map(function (x, i) { |
|||
return m + i; |
|||
}); |
|||
} |
|||
})(1, 10000);</lang> |
})(1, 10000);</lang> |