Multiplication tables: Difference between revisions

m
→‎JS ES6: Updated primitives
m (→‎JS ES6: Updated primitives)
Line 3,919:
====ES6====
<lang JavaScript>(() => {
'"use strict'";
 
// ----------------------- MAINMULTIPLICATION TABLE ------------------------
 
// multTable :: Int -> Int -> [[String]]
const multTable = m => n => {
const xs = enumFromTo(m)(n);
 
return [
['"x'", ...xs],
...xs.flatMap(
x => [
[x, ...xs.flatMap(
y => y < x ? [''] : [str(x * y)]
[""]
) : [str(x * y)]
)]
]
Line 3,936 ⟶ 3,941:
};
 
// ----------------------- TEST ------------------------
 
// main :: () -> IO String
const main = () =>
wikiTable({
multTable(1)(12)class: "wikitable",
true,style: [
' "text-align:center;width:33em;height:33em;table-layout:fixed;'",
'0': a "width:33em",
'1': b "height:33em",
"table-layout:fixed"
length: 2].join(";")
});(
type: 'Tuple',multTable(1)(12)
);
 
// ----------------- GENERIC FUNCTIONS -----------------
 
// Tuple (,) :: a -> b -> (a, b)
const Tuple = a =>
b => ({
type: 'Tuple',
'0': a,
'1': b,
length: 2
});
 
// enumFromTo :: Int -> Int -> [Int]
Line 3,963 ⟶ 3,965:
}, (_, i) => m + i) : [];
 
// quotRem :: Int -> Int -> (Int, Int)
const quotRem = m => n =>
Tuple(Math.floor(m / n))(
m % n
);
 
// str :: a -> String
const str = x =>
Array.isArray(x) && x.every(
v => ('"string'" === typeof v) && (1 === v.length)
) ? (
x.join('')// [Char] -> String
x.join("")
) : null === x ? (
m % n"null"
) : x.toString();
 
// -------------------- FORMATTING ---------------------
 
// wikiTable :: Dict -> [[a]] -> Bool -> String -> String
const wikiTable = (rows, blnHeader, style)opts =>
'{|rows class="wikitable"> ' + ({
style ? 'style="' + style + '"' : ''const
) + rows.map((row, i) style => {["class", "style"].reduce(
const dlm = ((blnHeader && !i) ? '!' :(a, '|'k); => k in opts ? (
return '\n|-\n' + dlm + ' ' + row.map(v `${a}${k}=>"${opts[k]}" `
typeof v !== 'undefined' ? v) : 'a, '""
),
body = rows.joinmap('(row, 'i) +=> dlm + dlm + ' ');{
}) const
cells = row.map(
.join('') + '\n|}';
x => `${x}` || " "
).join(" || ");
 
return `${i ? "|" : "!"} ${cells}`;
// ----------------------- MAIN ------------------------
}).join("\n|-\n");
 
return `{| ${style}\n${body}\n|}`;
) };
 
// MAIN ---
return main();
})();</lang>
{{Out}}
{| class="wikitable" style="text-align:center;width:33em;height:33em;table-layout:fixed;"
! x !!|| 1 !!|| 2 !!|| 3 !!|| 4 !!|| 5 !!|| 6 !!|| 7 !!|| 8 !!|| 9 !!|| 10 !!|| 11 !!|| 12
|-
! x !! 1 !! 2 !! 3 !! 4 !! 5 !! 6 !! 7 !! 8 !! 9 !! 10 !! 11 !! 12
|-
| 1 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || 10 || 11 || 12
|-
| 2 || || 4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 22 || 24
|-
| 3 || || || 9 || 12 || 15 || 18 || 21 || 24 || 27 || 30 || 33 || 36
|-
| 4 || || || || 16 || 20 || 24 || 28 || 32 || 36 || 40 || 44 || 48
|-
| 5 || || || || || 25 || 30 || 35 || 40 || 45 || 50 || 55 || 60
|-
| 6 || || || || || || 36 || 42 || 48 || 54 || 60 || 66 || 72
|-
| 7 || || || || || || || 49 || 56 || 63 || 70 || 77 || 84
|-
| 8 || || || || || || || || 64 || 72 || 80 || 88 || 96
|-
| 9 || || || || || || || || || 81 || 90 || 99 || 108
|-
| 10 || || || || || || || || || || 100 || 110 || 120
|-
| 11 || || || || || || || || || || || 121 || 132
|-
| 12 || || || || || || || || || || || || 144
|}
 
9,655

edits