Skip to content

Commit 1d28969

Browse files
committed
Saves again
1 parent 1a23b23 commit 1d28969

File tree

1 file changed

+67
-40
lines changed

1 file changed

+67
-40
lines changed

docs/2019/day/16.md

Lines changed: 67 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,68 @@
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+
};
168
```
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

Comments
 (0)