-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday17-set_and_forget.js
98 lines (91 loc) · 2.5 KB
/
day17-set_and_forget.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
const { Worker } = require('worker_threads');
const ascii = require('./day17-ascii');
function provideString(string, stdin) {
for(var c = 0; c < string.length; c++) {
stdin.write(`${string.charCodeAt(c)}\n`);
}
}
function walkTheScaffold () {
ascii[0] = 2;
return new Promise((resolve) => {
const worker = new Worker('./computer.js', {
workerData: ascii,
stdin: true,
stdout: true
});
provideString('A,B,A,C,A,B,C,C,A,B\n', worker.stdin);
provideString('R,8,L,10,R,8\n', worker.stdin);
provideString('R,12,R,8,L,8,L,12\n', worker.stdin);
provideString('L,12,L,10,L,8\n', worker.stdin);
provideString('y\n', worker.stdin);
worker.stdout.setEncoding('utf8');
var line = '';
var scaffolds = '';
var countLine = 0;
worker.stdout.on('data', (data) => {
if(data.length>4) {
//console.log('not ascci ? : ' + data);
resolve(parseInt(data));
}
line += String.fromCharCode(parseInt(data));
if(data == 10) {
scaffolds += line;
line = '';
countLine++;
}
if(countLine == 41) {
//console.log(scaffolds);
//console.log('-----------------------------------------------------');
countLine = 0;
}
});
worker.stdout.on('end', () => {
});
});
}
function read() {
ascii[0] = 1;
return new Promise((resolve) => {
const worker = new Worker('./computer.js', {
workerData: ascii,
stdin: true,
stdout: true
});
worker.stdout.setEncoding('utf8');
var scaffolds = '';
worker.stdout.on('data', (output) => {
scaffolds += String.fromCharCode(parseInt(output));
});
worker.stdout.on('end', () => {
resolve(scaffolds);
});
});
}
function getRowSize(scaffolds) {
return scaffolds.indexOf('\n') + 1;
}
function getCoordinates(position, rowSize) {
const row = Math.floor(position/rowSize);
const column = position - row * rowSize;
return [row, column];
}
function calibration(scaffolds) {
const rowSize = getRowSize(scaffolds);
var sum = 0;
scaffolds.split('').forEach((c, i) => {
if(c == '#'
&& scaffolds[i - rowSize] == '#'
&& scaffolds[i + rowSize] == '#'
&& scaffolds[i - 1] == '#'
&& scaffolds[i + 1] == '#'
) {
const [row, col] = getCoordinates(i, rowSize);
//console.log('intersection : ', row, col);
sum += row * col;
}
});
return sum;
}
module.exports = {
read, calibration, getRowSize, getCoordinates, walkTheScaffold, provideString
};