46 lines
1.4 KiB
JavaScript
46 lines
1.4 KiB
JavaScript
(function (m, n) {
|
|
|
|
// [m..n]
|
|
function range(m, n) {
|
|
return Array.apply(null, Array(n - m + 1)).map(function (x, i) {
|
|
return m + i;
|
|
});
|
|
}
|
|
|
|
// Monadic bind (chain) for lists
|
|
function mb(xs, f) {
|
|
return [].concat.apply([], xs.map(f));
|
|
}
|
|
|
|
var rng = range(m, n),
|
|
lstTable = [['x'].concat( rng )]
|
|
.concat(mb(rng, function (x) {
|
|
return [[x].concat(mb(rng, function (y) {
|
|
return y < x ? [''] : [x * y]; // triangle only
|
|
}))]}));
|
|
|
|
/* FORMATTING OUTPUT */
|
|
|
|
// [[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|}';
|
|
}
|
|
|
|
// Formatted as WikiTable
|
|
return wikiTable(
|
|
lstTable, true,
|
|
'text-align:center;width:33em;height:33em;table-layout:fixed;'
|
|
) + '\n\n' +
|
|
|
|
// or simply stringified as JSON
|
|
JSON.stringify(lstTable);
|
|
})(1, 12);
|