Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
29
Task/Catalan-numbers/JavaScript/catalan-numbers-1.js
Normal file
29
Task/Catalan-numbers/JavaScript/catalan-numbers-1.js
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
<html><head><title>Catalan</title></head>
|
||||
<body><pre id='x'></pre><script type="application/javascript">
|
||||
function disp(x) {
|
||||
var e = document.createTextNode(x + '\n');
|
||||
document.getElementById('x').appendChild(e);
|
||||
}
|
||||
|
||||
var fc = [], c2 = [], c3 = [];
|
||||
function fact(n) { return fc[n] ? fc[n] : fc[n] = (n ? n * fact(n - 1) : 1); }
|
||||
function cata1(n) { return Math.floor(fact(2 * n) / fact(n + 1) / fact(n) + .5); }
|
||||
function cata2(n) {
|
||||
if (n == 0) return 1;
|
||||
if (!c2[n]) {
|
||||
var s = 0;
|
||||
for (var i = 0; i < n; i++) s += cata2(i) * cata2(n - i - 1);
|
||||
c2[n] = s;
|
||||
}
|
||||
return c2[n];
|
||||
}
|
||||
function cata3(n) {
|
||||
if (n == 0) return 1;
|
||||
return c3[n] ? c3[n] : c3[n] = (4 * n - 2) * cata3(n - 1) / (n + 1);
|
||||
}
|
||||
|
||||
disp(" meth1 meth2 meth3");
|
||||
for (var i = 0; i <= 15; i++)
|
||||
disp(i + '\t' + cata1(i) + '\t' + cata2(i) + '\t' + cata3(i));
|
||||
|
||||
</script></body></html>
|
||||
85
Task/Catalan-numbers/JavaScript/catalan-numbers-2.js
Normal file
85
Task/Catalan-numbers/JavaScript/catalan-numbers-2.js
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
(() => {
|
||||
"use strict";
|
||||
|
||||
// ----------------- CATALAN NUMBERS -----------------
|
||||
|
||||
// catalansDefinitionThree :: [Int]
|
||||
const catalansDefinitionThree = () =>
|
||||
// An infinite sequence of Catalan numbers.
|
||||
scanlGen(
|
||||
c => n => Math.floor(
|
||||
(2 * c * pred(2 * n)) / succ(n)
|
||||
)
|
||||
)(1)(
|
||||
enumFrom(1)
|
||||
);
|
||||
|
||||
|
||||
// ---------------------- TEST -----------------------
|
||||
// main :: IO ()
|
||||
const main = () =>
|
||||
take(15)(
|
||||
catalansDefinitionThree()
|
||||
);
|
||||
|
||||
|
||||
// --------------------- GENERIC ---------------------
|
||||
|
||||
// enumFrom :: Enum a => a -> [a]
|
||||
const enumFrom = function* (n) {
|
||||
// An infinite sequence of integers,
|
||||
// starting with n.
|
||||
let v = n;
|
||||
|
||||
while (true) {
|
||||
yield v;
|
||||
v = 1 + v;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// pred :: Int -> Int
|
||||
const pred = x =>
|
||||
x - 1;
|
||||
|
||||
|
||||
// scanlGen :: (b -> a -> b) -> b -> Gen [a] -> [b]
|
||||
const scanlGen = f =>
|
||||
// The series of interim values arising
|
||||
// from a catamorphism over an infinite list.
|
||||
startValue => function* (gen) {
|
||||
let
|
||||
a = startValue,
|
||||
x = gen.next();
|
||||
|
||||
yield a;
|
||||
while (!x.done) {
|
||||
a = f(a)(x.value);
|
||||
yield a;
|
||||
x = gen.next();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// succ :: Int -> Int
|
||||
const succ = x =>
|
||||
1 + x;
|
||||
|
||||
|
||||
// take :: Int -> [a] -> [a]
|
||||
// take :: Int -> String -> String
|
||||
const take = n =>
|
||||
// The first n elements of a list,
|
||||
// string of characters, or stream.
|
||||
xs => Array.from({
|
||||
length: n
|
||||
}, () => {
|
||||
const x = xs.next();
|
||||
|
||||
return x.done ? [] : [x.value];
|
||||
}).flat();
|
||||
|
||||
|
||||
// MAIN ---
|
||||
return JSON.stringify(main(), null, 2);
|
||||
})();
|
||||
Loading…
Add table
Add a link
Reference in a new issue