Compare commits

...

2 Commits

Author SHA1 Message Date
Eric Wagoner
462508c90f day six part two 2025-12-07 00:24:58 -05:00
Eric Wagoner
83911a58ec day six part one 2025-12-06 11:19:33 -05:00

135
06/code.js Normal file
View File

@@ -0,0 +1,135 @@
import { readFileSync } from 'node:fs';
let sampleMode = false;
let usedArray = [];
const sampleArray = readFileSync('sample.txt').toString().split("\n");
const inputArray = readFileSync('input.txt').toString().split("\n");
if (sampleMode) {
usedArray = sampleArray;
} else {
usedArray = inputArray;
}
// Part One
console.time("part1");
let total = 0;
const problems = [];
for (const row of usedArray) {
const contents = row.trim().split(/\s+/);
for (let i = 0; i < contents.length; i++) {
const element = contents[i];
if (!problems[i]) {
problems[i] = [];
}
problems[i].push(element);
}
}
for (let problem of problems) {
problem = problem.reverse();
const operator = problem.shift();
let answer = operator === '+' ? 0 : 1;
for (const number of problem) {
if (operator === '+') {
answer += Number.parseInt(number);
} else {
answer *= Number.parseInt(number);
}
}
total += answer;
}
console.timeEnd("part1");
console.log(total);
// Part Two
console.time("part2");
let total2 = 0;
let newInput = JSON.parse(JSON.stringify(usedArray));
for (let rowIndex = 0; rowIndex < newInput.length; rowIndex++) {
const row = newInput[rowIndex];
newInput[rowIndex] = row.split("");
}
const problemStarts = [];
const operatorRowArray = newInput[usedArray.length - 1];
for (let i = 0; i < operatorRowArray.length; i++) {
if (["*", "+"].includes(operatorRowArray[i])) {
problemStarts.push(i);
}
}
for (let rowIndex = 0; rowIndex < usedArray.length; rowIndex++) {
const row = usedArray[rowIndex];
for (let i = 0; i < row.length; i++) {
const char = row[i];
if (char === " " && !problemStarts.includes(i + 1)) {
newInput[rowIndex][i] = '#';
}
}
}
for (let rowIndex = 0; rowIndex < newInput.length; rowIndex++) {
const row = newInput[rowIndex];
newInput[rowIndex] = row.join("");
}
const problems2 = [];
for (const row of newInput) {
const contents = row.trim().split(/\s+/);
for (let i = 0; i < contents.length; i++) {
const element = contents[i];
if (!problems2[i]) {
problems2[i] = [];
}
problems2[i].push(element);
}
}
let problemsVertical = [];
for (let i = 0; i < problems2.length; i++) {
const problem = problems2[i];
let vertProblem = [];
for (let j = 0; j < problem.length - 1; j++) {
const newElement =
(problem[0] && problem[0][j] && problem[0][j] !== '#' ? problem[0][j] : '') +
(problem[1] && problem[1][j] && problem[1][j] !== '#' ? problem[1][j] : '') +
(problem[2] && problem[2][j] && problem[2][j] !== '#' ? problem[2][j] : '') +
(problem[3] && problem[3][j] && problem[3][j] !== '#' ? problem[3][j] : '') +
(problem[4] && problem[4][j] && problem[4][j] !== '#' ? problem[4][j] : '');
if (Number.parseInt(newElement)) {
vertProblem.push(Number.parseInt(newElement));
}
}
vertProblem.push(problem[problem.length - 1]);
problemsVertical.push(vertProblem);
}
for (let problem of problemsVertical) {
problem = problem.reverse();
const operator = problem.shift();
let answer = operator.includes('+') ? 0 : 1;
for (const number of problem) {
if (operator.includes('+')) {
answer += Number.parseInt(number);
} else {
answer *= Number.parseInt(number);
}
}
total2 += answer;
}
console.timeEnd("part2");
console.log(total2);
// functions