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}}==
9,655

edits