diff --git a/src/exercises/day_10.ts b/src/exercises/day_10.ts index 416f2a5..8fd0ae6 100644 --- a/src/exercises/day_10.ts +++ b/src/exercises/day_10.ts @@ -14,7 +14,7 @@ interface MachineManual { export default async function Factory() { console.log("== Factory =="); - const manual_list = await read_machine_manuals( + const manual_list = await read_machine_manuals_quick( "src/exercises/assets/day_10_input.txt", ); const min_presses = count_min_button_presses(manual_list); @@ -27,7 +27,6 @@ export default async function Factory() { export function count_min_button_presses(manuals: MachineManual[]): number { let total_sum = 0; manuals.forEach((manual, m_i) => { - console.log(`== Manual ${m_i} out of ${manuals.length}`); const wiring_list = manual.button_wirings; let min_presses = Infinity; @@ -107,8 +106,7 @@ export async function read_machine_manuals( const input_txt = await Deno.readTextFile(path); const lines = input_txt.split("\n"); - const manual_list: MachineManual[] = lines.map((line, line_i) => { - console.log(`== Reading file ${line_i} out of ${lines.length}`); + const manual_list: MachineManual[] = lines.map((line) => { const matched_line = line.matchAll(line_regex)?.toArray()?.[0]; if (matched_line && matched_line.length > 3) { const indicators = matched_line[1].toString().split("").map((ch) => @@ -131,3 +129,46 @@ export async function read_machine_manuals( return manual_list; } + +export async function read_machine_manuals_quick( + path: string, +): Promise { + const input_txt = await Deno.readTextFile(path); + const lines = input_txt.split("\n"); + + const manual_list: MachineManual[] = []; + + lines.forEach((line, line_i) => { + const manual: MachineManual = { + indicators: [], + button_wirings: [], + joltage_requirements: [], + }; + line.split(" ").forEach((element) => { + if (element.includes("[")) { + manual.indicators = element.replaceAll("[", "").replaceAll("]", "") + .split("").map((e) => e as Indicator); + } else if (element.includes("{")) { + manual.joltage_requirements = element.replaceAll("{", "").replaceAll( + "}", + "", + ).split(",").map((e) => parseInt(e)); + } else if (element.includes("(")) { + manual.button_wirings.push( + element.replaceAll("(", "").replaceAll(")", "").split(",").map((e) => + parseInt(e) + ), + ); + } + }); + + if ( + manual.button_wirings.length > 0 && + manual.joltage_requirements.length > 0 && manual.indicators.length > 0 + ) { + manual_list.push(manual); + } + }); + + return manual_list; +}