Multiplication tables: Difference between revisions
Content added Content deleted
(→{{header|JavaScript}}: Added ES6 version) |
|||
Line 2,545: | Line 2,545: | ||
<div><table><tr><th>x</th><th>1</th><th>2</th><th>3</th><th>4</th><th>5</th><th>6</th><th>7</th><th>8</th><th>9</th><th>10</th><th>11</th><th>12</th></tr><tr><th>1</th><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td></tr><tr><th>2</th><td> </td><td>4</td><td>6</td><td>8</td><td>10</td><td>12</td><td>14</td><td>16</td><td>18</td><td>20</td><td>22</td><td>24</td></tr><tr><th>3</th><td> </td><td> </td><td>9</td><td>12</td><td>15</td><td>18</td><td>21</td><td>24</td><td>27</td><td>30</td><td>33</td><td>36</td></tr><tr><th>4</th><td> </td><td> </td><td> </td><td>16</td><td>20</td><td>24</td><td>28</td><td>32</td><td>36</td><td>40</td><td>44</td><td>48</td></tr><tr><th>5</th><td> </td><td> </td><td> </td><td> </td><td>25</td><td>30</td><td>35</td><td>40</td><td>45</td><td>50</td><td>55</td><td>60</td></tr><tr><th>6</th><td> </td><td> </td><td> </td><td> </td><td> </td><td>36</td><td>42</td><td>48</td><td>54</td><td>60</td><td>66</td><td>72</td></tr><tr><th>7</th><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>49</td><td>56</td><td>63</td><td>70</td><td>77</td><td>84</td></tr><tr><th>8</th><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>64</td><td>72</td><td>80</td><td>88</td><td>96</td></tr><tr><th>9</th><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>81</td><td>90</td><td>99</td><td>108</td></tr><tr><th>10</th><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>100</td><td>110</td><td>120</td></tr><tr><th>11</th><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>121</td><td>132</td></tr><tr><th>12</th><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>144</td></tr></table></div> |
<div><table><tr><th>x</th><th>1</th><th>2</th><th>3</th><th>4</th><th>5</th><th>6</th><th>7</th><th>8</th><th>9</th><th>10</th><th>11</th><th>12</th></tr><tr><th>1</th><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td></tr><tr><th>2</th><td> </td><td>4</td><td>6</td><td>8</td><td>10</td><td>12</td><td>14</td><td>16</td><td>18</td><td>20</td><td>22</td><td>24</td></tr><tr><th>3</th><td> </td><td> </td><td>9</td><td>12</td><td>15</td><td>18</td><td>21</td><td>24</td><td>27</td><td>30</td><td>33</td><td>36</td></tr><tr><th>4</th><td> </td><td> </td><td> </td><td>16</td><td>20</td><td>24</td><td>28</td><td>32</td><td>36</td><td>40</td><td>44</td><td>48</td></tr><tr><th>5</th><td> </td><td> </td><td> </td><td> </td><td>25</td><td>30</td><td>35</td><td>40</td><td>45</td><td>50</td><td>55</td><td>60</td></tr><tr><th>6</th><td> </td><td> </td><td> </td><td> </td><td> </td><td>36</td><td>42</td><td>48</td><td>54</td><td>60</td><td>66</td><td>72</td></tr><tr><th>7</th><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>49</td><td>56</td><td>63</td><td>70</td><td>77</td><td>84</td></tr><tr><th>8</th><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>64</td><td>72</td><td>80</td><td>88</td><td>96</td></tr><tr><th>9</th><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>81</td><td>90</td><td>99</td><td>108</td></tr><tr><th>10</th><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>100</td><td>110</td><td>120</td></tr><tr><th>11</th><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>121</td><td>132</td></tr><tr><th>12</th><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>144</td></tr></table></div> |
||
===Functional=== |
|||
=== |
====ES5==== |
||
<lang JavaScript>(function (m, n) { |
<lang JavaScript>(function (m, n) { |
||
Line 2,642: | Line 2,641: | ||
[11,"","","","","","","","","","",121,132], |
[11,"","","","","","","","","","",121,132], |
||
[12,"","","","","","","","","","","",144]]</lang> |
[12,"","","","","","","","","","","",144]]</lang> |
||
====ES6==== |
|||
<lang JavaScript>(() => { |
|||
// multTable :: Int -> Int -> [[String]] |
|||
const multTable = (m, n) => { |
|||
const xs = enumFromToInt(m, n); |
|||
return cons( |
|||
cons('x', xs), |
|||
concatMap( |
|||
x => [cons(x, concatMap( |
|||
y => y < x ? [''] : [x * y], |
|||
xs |
|||
))], |
|||
xs |
|||
) |
|||
); |
|||
}; |
|||
// main :: () -> IO String |
|||
const main = () => { |
|||
return wikiTable( |
|||
multTable(1, 12), true, |
|||
'text-align:center;width:33em;height:33em;table-layout:fixed;' |
|||
); |
|||
}; |
|||
// GENERIC FUNCTIONS ----------------------------------------------------- |
|||
// Tuple (,) :: a -> b -> (a, b) |
|||
const Tuple = (a, b) => ({ |
|||
type: 'Tuple', |
|||
'0': a, |
|||
'1': b |
|||
}); |
|||
// Size of space -> filler Char -> String -> Centered String |
|||
// center :: Int -> Char -> String -> String |
|||
const center = (n, c, s) => { |
|||
const |
|||
qr = quotRem(n - s.length, 2), |
|||
q = qr[0]; |
|||
return concat(concat([replicate(q, c), s, replicate(q + qr[1], c)])); |
|||
}; |
|||
// concat :: [[a]] -> [a] |
|||
// concat :: [String] -> String |
|||
const concat = xs => |
|||
xs.length > 0 ? (() => { |
|||
const unit = typeof xs[0] === 'string' ? '' : []; |
|||
return unit.concat.apply(unit, xs); |
|||
})() : []; |
|||
// concatMap :: (a -> [b]) -> [a] -> [b] |
|||
const concatMap = (f, xs) => [].concat.apply([], xs.map(f)); |
|||
// cons :: a -> [a] -> [a] |
|||
const cons = (x, xs) => [x, ...xs]; |
|||
// enumFromToInt :: Int -> Int -> [Int] |
|||
const enumFromToInt = (m, n) => |
|||
n >= m ? Array.from({ |
|||
length: Math.floor(n - m) + 1 |
|||
}, (_, i) => m + i) : []; |
|||
// map :: (a -> b) -> [a] -> [b] |
|||
const map = (f, xs) => xs.map(f); |
|||
// quotRem :: Int -> Int -> (Int, Int) |
|||
const quotRem = (m, n) => Tuple(Math.floor(m / n), m % n); |
|||
// replicate :: Int -> a -> [a] |
|||
const replicate = (n, x) => |
|||
Array.from({ |
|||
length: n |
|||
}, () => x); |
|||
// FORMATTING ------------------------------------------------------------- |
|||
// wikiTable :: [[a]] -> Bool -> String -> String |
|||
const wikiTable = (rows, blnHeader, style) => |
|||
'{| class="wikitable" ' + ( |
|||
style ? 'style="' + style + '"' : '' |
|||
) + rows.map((row, i) => { |
|||
const dlm = ((blnHeader && !i) ? '!' : '|'); |
|||
return '\n|-\n' + dlm + ' ' + row.map(v => |
|||
typeof v !== 'undefined' ? v : ' ' |
|||
) |
|||
.join(' ' + dlm + dlm + ' '); |
|||
}) |
|||
.join('') + '\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 |
|||
|- |
|||
| 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 |
|||
|} |
|||
=={{header|Julia}}== |
=={{header|Julia}}== |