diff --git a/06/code.js b/06/code.js index 319208d..52c20ce 100644 --- a/06/code.js +++ b/06/code.js @@ -21,7 +21,7 @@ let total = 0; const problems = []; for (const row of usedArray) { const contents = row.trim().split(/\s+/); - console.log(contents); + for (let i = 0; i < contents.length; i++) { const element = contents[i]; if (!problems[i]) { @@ -52,12 +52,84 @@ console.log(total); // Part Two console.time("part2"); -for (const element of usedArray) { - const contents = element.split(" "); +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(); +console.log(total2); // functions