Find first missing positive: Difference between revisions
→{{header|JavaScript}}: Added a solution in JavaScript
(→{{header|JavaScript}}: Added a solution in JavaScript) |
|||
Line 442:
<lang J> fmp 1 2 0;3 4 _1 1; 7 8 9 11 12
3 2 1</lang>
=={{header|JavaScript}}==
<lang javascript>(() => {
"use strict";
// ---------- FIRST MISSING NATURAL NUMBER -----------
// firstGap :: [Int] -> Int
const firstGap = xs =>
filterGen(
x => !xs.includes(x)
)(
enumFrom(1)
)
.next()
.value;
// ---------------------- TEST -----------------------
// main :: IO ()
const main = () => [
[1, 2, 0],
[3, 4, -1, 1],
[7, 8, 9, 11, 12]
]
.map(xs => `${show(xs)} -> ${firstGap(xs)}`)
.join("\n");
// --------------------- GENERIC ---------------------
// enumFrom :: Int -> [Int]
const enumFrom = function* (x) {
// A non-finite succession of
// integers, starting with n.
let v = x;
while (true) {
yield v;
v = 1 + v;
}
};
// filterGen :: (a -> Bool) -> Gen [a] -> Gen [a]
const filterGen = p =>
// A stream of values which are drawn
// from a generator, and satisfy p.
xs => {
const go = function* () {
let x = xs.next();
while (!x.done) {
const v = x.value;
if (p(v)) {
yield v;
}
x = xs.next();
}
};
return go(xs);
};
// show :: a -> String
const show = x => JSON.stringify(x);
// MAIN ---
return main();
})();</lang>
{{Out}}
<pre>[1,2,0] -> 3
[3,4,-1,1] -> 2
[7,8,9,11,12] -> 1</pre>
=={{header|jq}}==
|