Skip to content

Commit

Permalink
refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
shahata committed Feb 7, 2025
1 parent 941c741 commit b5de99c
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 52 deletions.
12 changes: 5 additions & 7 deletions src/index.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { solveAll, solveAllYears } from "./utils/solver.js";
import { solveDay, solveAllDays, solveAllYears } from "./utils/solver.js";
import { execSync } from "node:child_process";
import * as process from "node:process";

Expand All @@ -16,7 +16,7 @@ if (process.env.ADVENT_SESSION) {
let day = process.argv[3];
if (process.argv[2] && process.argv[2].includes("/")) {
let clean = process.argv[2].split("/").slice(-2);
let yearNum = parseInt(clean[0]);
let yearNum = parseInt(clean[0].match(/\d+/).pop());
let dayNum = parseInt(clean[1].match(/\d+/).pop());
if (Number.isNaN(yearNum) || Number.isNaN(dayNum)) {
console.error("Invalid arguments");
Expand All @@ -25,11 +25,9 @@ if (process.env.ADVENT_SESSION) {
year = `${yearNum}`;
day = `${dayNum}`;
}
if (year) {
await solveAll(year, day).catch(err => console.error(err.stack));
} else {
await solveAllYears().catch(err => console.error(err.stack));
}
if (day) await solveDay(year, day);
else if (year) await solveAllDays(year);
else await solveAllYears();
} else {
console.error("************************************************************");
console.error("************************************************************");
Expand Down
88 changes: 43 additions & 45 deletions src/utils/solver.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,38 +16,37 @@ import {
downloadIndexTicks,
} from "./renderer.js";

let duration;
let __dirname = path.dirname(fileURLToPath(import.meta.url));

async function timerify(fn) {
let start = performance.now();
let result = await fn();
let end = performance.now();
duration = `(${Math.round(end - start)}ms)`;
return result;
let duration = `(${Math.round(end - start)}ms)`;
return { result, duration };
}

let __dirname = path.dirname(fileURLToPath(import.meta.url));

function solverFunction(year, day) {
let solver = path.resolve(__dirname, "..", year, `${dayName(day)}.js`);
if (!existsSync(solver)) {
return undefined;
}
return async () => {
let module = await import(`../${year}/${dayName(day)}.js`);
let input = readInput(
new URL(`../${year}/${dayName(day)}.js`, import.meta.url),
);
let moduleName = `../${year}/${dayName(day)}.js`;
let module = await import(moduleName);
let input = readInput(new URL(moduleName, import.meta.url));
console.log(`Solution for ${year}/${dayName(day)}!!!`);
console.log("----------------------------");
let result, duration;
if (module.day) {
let { part1, part2 } = await timerify(() => module.day(input));
console.log(`Part1: ${part1}`);
console.log(`Part2: ${part2}`, duration);
({ result, duration } = await timerify(() => module.day(input)));
console.log(`Part1: ${result.part1}`);
console.log(`Part2: ${result.part2}`, duration);
} else {
let result1 = timerify(() => module.part1(input));
console.log(`Part1: ${await result1}`, duration);
let result2 = timerify(() => module.part2(input));
console.log(`Part2: ${await result2}`, duration);
({ result, duration } = await timerify(() => module.part1(input)));
console.log(`Part1: ${result}`, duration);
({ result, duration } = await timerify(() => module.part2(input)));
console.log(`Part2: ${result}`, duration);
}
console.log("");
};
Expand Down Expand Up @@ -93,43 +92,42 @@ async function takeScreenshots(year) {
);
}

export async function solveAll(year, day, run = true) {
if (day) {
tempLeaderboard(year);
let solver = solverFunction(year, day);
if (solver) {
await solver();
} else {
await createSolver(year, day);
}
export async function solveDay(year, day) {
tempLeaderboard(year);
let solver = solverFunction(year, day);
if (solver) {
await solver();
} else {
console.log(`Downloading files (${year})...`);
let days = getDays(year);
var bar = new ProgressBar("[:bar] :percent", {
total: (run ? days.length : 0) + downloadIndexTicks,
width: 40,
});
await downloadIndex(year, bar, days.length * 2);
if (run) {
for (let day of days) {
await downloadInput(year, day);
bar.tick();
}
}
await takeScreenshots(year);
await createSolver(year, day);
}
}

if (run) {
for (let day of days) {
let solver = solverFunction(year, day);
await solver();
}
export async function solveAllDays(year, run = true) {
console.log(`Downloading files (${year})...`);
let days = getDays(year);
var bar = new ProgressBar("[:bar] :percent", {
total: (run ? days.length : 0) + downloadIndexTicks,
width: 40,
});
await downloadIndex(year, bar, days.length * 2);
if (run) {
for (let day of days) {
await downloadInput(year, day);
bar.tick();
}
}
await takeScreenshots(year);
if (run) {
for (let day of days) {
let solver = solverFunction(year, day);
await solver();
}
}
}

export async function solveAllYears() {
let years = getAllYears();
for (let year of years) {
await solveAll(year, undefined, false);
await solveAllDays(year, false);
}
}

0 comments on commit b5de99c

Please sign in to comment.