Range consolidation: Difference between revisions

m
(→‎{{header|Javascript}}: Added a JS draft.)
Line 281:
 
// consolidated :: [(Float, Float)] -> [(Float, Float)]
const consolidated = xs => {
const go = foldl((abetc, xy) => {
return 0 < abetc.length ? (() => {
const [a, b] = abetc[0],
[x, y]etc = xyabetc.slice(1),
etc[a, b] = abetc.slice(1);[0],
[x, y] = xy;
 
return y >= b ? (
cons(xy, etc)
Line 292 ⟶ 294:
cons([x, b], etc)
) : cons(xy, abetc);
})() : [xy];,
}; [],
return sortBy(flip(comparing(fst)),
flip map(comparing(fst))[a, b]) => a < b ? (
map(([a, b]) => a < b ? ( [a, b]
) : [ab, ba],
) : [b, a], xs
xs)
)
).reduce(go, []);
};
 
console.log(
Line 362 ⟶ 363:
(a, b) => f(b, a)
) : (x => y => f(y)(x));
 
// foldl :: (a -> b -> a) -> a -> [b] -> a
const foldl = (f, a, xs) => xs.reduce(f, a);
 
// fst :: (a, b) -> a
9,655

edits