September Morn Update
This commit is contained in:
parent
4e2d22a71d
commit
aac6731f2c
6856 changed files with 141342 additions and 21127 deletions
|
|
@ -0,0 +1,59 @@
|
|||
(() => {
|
||||
|
||||
// maxSubseq :: [Int] -> (Int, [Int])
|
||||
const maxSubseq = xs =>
|
||||
snd(xs.reduce((tpl, x) => {
|
||||
const [m1, m2] = Array.from(fst(tpl)),
|
||||
high = max(
|
||||
Tuple(0, []),
|
||||
Tuple(m1 + x, m2.concat(x))
|
||||
);
|
||||
return Tuple(high, max(snd(tpl), high));
|
||||
}, Tuple(Tuple(0, []), Tuple(0, []))));
|
||||
|
||||
|
||||
// TEST -----------------------------------------------
|
||||
// main :: IO ()
|
||||
const main = () => {
|
||||
const mx = maxSubseq([-1, -2, 3, 5, 6, -2, -1, 4, -4, 2, -1]);
|
||||
showLog(snd(mx), fst(mx))
|
||||
}
|
||||
// [3,5,6,-2,-1,4] -> 15
|
||||
|
||||
|
||||
// GENERIC FUNCTIONS ----------------------------------
|
||||
|
||||
// fst :: (a, b) -> a
|
||||
const fst = tpl => tpl[0];
|
||||
|
||||
// gt :: Ord a => a -> a -> Bool
|
||||
const gt = (x, y) =>
|
||||
'Tuple' === x.type ? (
|
||||
x[0] > y[0]
|
||||
) : (x > y);
|
||||
|
||||
// max :: Ord a => a -> a -> a
|
||||
const max = (a, b) => gt(b, a) ? b : a;
|
||||
|
||||
// showLog :: a -> IO ()
|
||||
const showLog = (...args) =>
|
||||
console.log(
|
||||
args
|
||||
.map(JSON.stringify)
|
||||
.join(' -> ')
|
||||
);
|
||||
|
||||
// snd :: (a, b) -> b
|
||||
const snd = tpl => tpl[1];
|
||||
|
||||
// Tuple (,) :: a -> b -> (a, b)
|
||||
const Tuple = (a, b) => ({
|
||||
type: 'Tuple',
|
||||
'0': a,
|
||||
'1': b,
|
||||
length: 2
|
||||
});
|
||||
|
||||
// MAIN ---
|
||||
return main();
|
||||
})();
|
||||
Loading…
Add table
Add a link
Reference in a new issue