|
| 1 | +```js |
| 2 | +const fillPattern = (function () { |
| 3 | + let cachedPatterns = {}; |
| 4 | + return (n) => { |
| 5 | + if (cachedPatterns[n]) { |
| 6 | + return cachedPatterns[n]; |
| 7 | + } |
| 8 | + |
| 9 | + let pattern = []; |
| 10 | + for (let num of [0, 1, 0, -1]) { |
| 11 | + for (let i = 0; i < n; i++) { |
| 12 | + pattern.push(num); |
| 13 | + } |
| 14 | + } |
| 15 | + |
| 16 | + // Offset the whole pattern left by one |
| 17 | + let first_digit = pattern.shift(); |
| 18 | + pattern.push(first_digit); |
| 19 | + |
| 20 | + cachedPatterns[n] = pattern; |
| 21 | + |
| 22 | + return pattern; |
| 23 | + }; |
| 24 | +})(); |
| 25 | + |
| 26 | +var table = function (input) { |
| 27 | + let pad = String(input.length).length; |
| 28 | + let space = '#'.padStart(pad); |
| 29 | + let header = `| ${space} | ${input.join(' | ')} |`; |
| 30 | + let line = header |
| 31 | + .split('') |
| 32 | + .map((c) => (c === '|' ? '|' : '-')) |
| 33 | + .join(''); |
| 34 | + let grid = []; |
| 35 | + |
| 36 | + let mid = Math.floor(input.length / 2); |
| 37 | + for (let y = 0; y < input.length; y++) { |
| 38 | + let row = []; |
| 39 | + let pattern = fillPattern(y + 1); |
| 40 | + for (let x = 0; x < input.length; x++) { |
| 41 | + let char = ' '; |
| 42 | + let i = x % pattern.length; |
| 43 | + let scalar = pattern[i]; |
| 44 | + |
| 45 | + if (y >= mid) { |
| 46 | + if (scalar === 1) { |
| 47 | + char = ` *${input[x]}*`; |
| 48 | + } else if (scalar === -1) { |
| 49 | + char = `*-${input[x]}*`; |
| 50 | + } |
| 51 | + } else { |
| 52 | + if (scalar === 1) { |
| 53 | + char = ` ${input[x]} `; |
| 54 | + } else if (scalar === -1) { |
| 55 | + char = ` -${input[x]} `; |
| 56 | + } |
| 57 | + } |
| 58 | + |
| 59 | + row.push(char); |
| 60 | + } |
| 61 | + |
| 62 | + grid.push(`| ${(y + 1).toString().padStart(pad)} | ${row.join(' | ')} |`); |
| 63 | + } |
| 64 | + |
| 65 | + let output = [header, line, ...grid].join('\n'); |
| 66 | + return output; |
| 67 | +}; |
1 | 68 | ``` |
2 | | -var table = function(input) { |
3 | | - let pad = String(input.length).length; |
4 | | - let space = '#'.padStart(pad); |
5 | | - let header = `| ${space} | ${input.join(' | ')} |`; |
6 | | - let line = header.split('').map(c => c === '|' ? '|' : '-').join(''); |
7 | | - let grid = []; |
8 | | -
|
9 | | - let mid = Math.floor(input.length / 2); |
10 | | - for (let y = 0; y < input.length; y++) { |
11 | | - let row = []; |
12 | | - let pattern = fillPattern(y + 1); |
13 | | - for (let x = 0; x < input.length; x++) { |
14 | | - let char = ' '; |
15 | | - let i = x % pattern.length; |
16 | | - let scalar = pattern[i]; |
17 | | -
|
18 | | - if (y >= mid) { |
19 | | - if (scalar === 1) { |
20 | | - char = ` *${input[x]}*`; |
21 | | - } else if (scalar === -1) { |
22 | | - char = `*-${input[x]}*`; |
23 | | - } |
24 | | - } else { |
25 | | - if (scalar === 1) { |
26 | | - char = ` ${input[x]} `; |
27 | | - } else if (scalar === -1) { |
28 | | - char = ` -${input[x]} `; |
29 | | - } |
30 | | - } |
31 | | -
|
32 | | - row.push(char); |
33 | | - } |
34 | | -
|
35 | | - grid.push(`| ${(y+1).toString().padStart(pad)} | ${row.join(' | ')} |`); |
36 | | - } |
37 | | -
|
38 | | - let output = [header, line, ...grid].join('\n'); |
39 | | - return output; |
40 | | -} |
41 | | -``` |
|
0 commit comments