Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
102
Task/Pascals-triangle/JavaScript/pascals-triangle-2.js
Normal file
102
Task/Pascals-triangle/JavaScript/pascals-triangle-2.js
Normal file
|
|
@ -0,0 +1,102 @@
|
|||
(function (n) {
|
||||
'use strict';
|
||||
|
||||
// PASCAL TRIANGLE --------------------------------------------------------
|
||||
|
||||
// pascal :: Int -> [[Int]]
|
||||
function pascal(n) {
|
||||
return foldl(function (a) {
|
||||
var xs = a.slice(-1)[0]; // Previous row
|
||||
return append(a, [zipWith(
|
||||
function (a, b) {
|
||||
return a + b;
|
||||
},
|
||||
append([0], xs),
|
||||
append(xs, [0])
|
||||
)]);
|
||||
}, [
|
||||
[1] // Initial seed row
|
||||
], enumFromTo(1, n - 1));
|
||||
};
|
||||
|
||||
|
||||
// GENERIC FUNCTIONS ------------------------------------------------------
|
||||
|
||||
// (++) :: [a] -> [a] -> [a]
|
||||
function append(xs, ys) {
|
||||
return xs.concat(ys);
|
||||
};
|
||||
|
||||
// enumFromTo :: Int -> Int -> [Int]
|
||||
function enumFromTo(m, n) {
|
||||
return Array.from({
|
||||
length: Math.floor(n - m) + 1
|
||||
}, function (_, i) {
|
||||
return m + i;
|
||||
});
|
||||
};
|
||||
|
||||
// foldl :: (b -> a -> b) -> b -> [a] -> b
|
||||
function foldl(f, a, xs) {
|
||||
return xs.reduce(f, a);
|
||||
};
|
||||
|
||||
// foldr (a -> b -> b) -> b -> [a] -> b
|
||||
function foldr(f, a, xs) {
|
||||
return xs.reduceRight(f, a);
|
||||
};
|
||||
|
||||
// map :: (a -> b) -> [a] -> [b]
|
||||
function map(f, xs) {
|
||||
return xs.map(f);
|
||||
};
|
||||
|
||||
// min :: Ord a => a -> a -> a
|
||||
function min(a, b) {
|
||||
return b < a ? b : a;
|
||||
};
|
||||
|
||||
// zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
|
||||
function zipWith(f, xs, ys) {
|
||||
return Array.from({
|
||||
length: min(xs.length, ys.length)
|
||||
}, function (_, i) {
|
||||
return f(xs[i], ys[i]);
|
||||
});
|
||||
};
|
||||
|
||||
// TEST and FORMAT --------------------------------------------------------
|
||||
var lstTriangle = pascal(n);
|
||||
|
||||
// [[a]] -> bool -> s -> s
|
||||
function wikiTable(lstRows, blnHeaderRow, strStyle) {
|
||||
return '{| class="wikitable" ' + (strStyle ? 'style="' + strStyle +
|
||||
'"' : '') + lstRows.map(function (lstRow, iRow) {
|
||||
var strDelim = blnHeaderRow && !iRow ? '!' : '|';
|
||||
return '\n|-\n' + strDelim + ' ' + lstRow.map(function (v) {
|
||||
return typeof v === 'undefined' ? ' ' : v;
|
||||
})
|
||||
.join(' ' + strDelim + strDelim + ' ');
|
||||
})
|
||||
.join('') + '\n|}';
|
||||
}
|
||||
|
||||
var lstLastLine = lstTriangle.slice(-1)[0],
|
||||
lngBase = lstLastLine.length * 2 - 1,
|
||||
nWidth = lstLastLine.reduce(function (a, x) {
|
||||
var d = x.toString()
|
||||
.length;
|
||||
return d > a ? d : a;
|
||||
}, 1) * lngBase;
|
||||
|
||||
return [wikiTable(lstTriangle.map(function (lst) {
|
||||
return lst.join(';;')
|
||||
.split(';');
|
||||
})
|
||||
.map(function (line, i) {
|
||||
var lstPad = Array((lngBase - line.length) / 2);
|
||||
return lstPad.concat(line)
|
||||
.concat(lstPad);
|
||||
}), false, 'text-align:center;width:' + nWidth + 'em;height:' + nWidth +
|
||||
'em;table-layout:fixed;'), JSON.stringify(lstTriangle)].join('\n\n');
|
||||
})(7);
|
||||
Loading…
Add table
Add a link
Reference in a new issue