Pascal's triangle: Difference between revisions

→‎JS ES6: Updated primitives
(→‎JS ES6: Updated primitives)
Line 2,504:
 
===ES6===
 
 
<lang JavaScript>(() => {
'use strict';
 
// PASCAL'S TRIANGLE ------------------------------------------------------
// pascal :: Int -> [[Int]]
let pascal = n =>
range(1, n - 1)
.reduce(a => {
let lstPreviousRow = a.slice(-1)[0];
 
// pascal :: Int -> return a[[Int]]
//const pascal ::= Intn -=> [[Int]]
.concat([zipWith((a, b) => a + b,
.reducefoldl(a => {
[0].concat(lstPreviousRow),
const lstPreviousRow = lstPreviousRowa.concatslice(-1)[0)];
return append(a, )]);[
} zipWith((a, b) => a + b, append([0], lstPreviousRow),
append(lstPreviousRow, [10]))
]);
}, [
[1]
], rangeenumFromTo(1, n - 1));
// TEST
 
// GENERIC FUNCTIONS ------------------------------------------------------
 
// Int(++) ->:: Int[a] -> Maybe Int[a] -> [Inta]
letconst rangeappend = (mxs, n, stepys) => {xs.concat(ys);
let d = (step || 1) * (n >= m ? 1 : -1);
return Array.from({
length: Math.floor((n - m) / d) + 1
}, (_, i) => m + (i * d));
},
 
// zipWithenumFromTo :: (aInt -> b -> c) -> [a] -> [b]Int -> [cInt]
const zipWithenumFromTo = (f, xsm, ysn) =>
xsArray.length === ys.length ? from({
length: xsMath.mapfloor((x,n i- m) =>+ f(x, ys[i]))1
}, (_, i) => )m :+ undefinedi);
 
// foldl :: (b -> a -> b) -> b -> [a] -> b
// TEST
const foldl = (f, a, xs) => xs.reduce(f, a);
return pascal(7)
.reduceRight((a, x) => {
let strIndent = a.indent;
 
// foldr (a -> b -> b) -> b -> [a] -> b
const foldr = (f, a, xs) => xs.reduceRight(f, a);
 
// map :: (a -> b) -> [a] -> [b]
const map = (f, xs) => xs.map(f);
 
// min :: Ord a => a -> a -> a
const min = (a, b) => b < a ? b : a;
 
// zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
const zipWith = (f, xs, ys) =>
return Array.from({
length: min(xs.length, ys.length)
}, (_, i) => m + f(xs[i], * dys[i]));
 
// TEST -------------------------------------------------------------------
return pascalfoldr(7(a, x) => {
letconst strIndent = a.indent;
return {
rows: strIndent + xmap(n => (' ' + n)
.map(n => (' ' + n).slice(-4), x)
.join('') + '\n' + a.rows,
indent: strIndent + ' '
Line 2,554 ⟶ 2,563:
rows: '',
indent: ''
}, pascal(7)).rows;
.rows;
})();</lang>
 
{{Out}}
<pre> 1
9,655

edits