-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
44 lines (39 loc) · 1.18 KB
/
index.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
const path = require("path");
const fs = require("fs");
const cp = require("child_process");
const dayFolderRegex = /day\d{2}/;
const solutionScriptRegex = /part[12]\.js/;
run();
async function run() {
const solutions = fs
.readdirSync(__dirname, { withFileTypes: true })
.filter(
(directory) =>
directory.isDirectory() && dayFolderRegex.test(directory.name)
)
.flatMap((directory) =>
fs
.readdirSync(path.join(__dirname, directory.name), {
withFileTypes: true,
})
.filter(
(file) => !file.isDirectory() && solutionScriptRegex.test(file.name)
)
.map((file) => [directory.name, file.name])
);
for (const [dirName, fileName] of solutions) {
console.log(await execute(dirName, fileName));
}
}
function execute(dirName, fileName) {
return new Promise((resolve) => {
let output = "";
const solution = cp.fork(path.join(__dirname, dirName, fileName), {
stdio: "pipe",
});
solution.on("close", () =>
resolve(`${dirName}/${fileName} => ${output.trim()}`)
);
solution.stdout.on("data", (d) => (output += d));
});
}