diff --git a/solutions/02.ts b/solutions/02.ts index 1e712a4..42a3976 100644 --- a/solutions/02.ts +++ b/solutions/02.ts @@ -3,19 +3,17 @@ import { solvables } from "../main.ts"; import type { Solvable } from "../solvable.ts"; import { readInput } from "../utils.ts"; - -// check if pattern with given width repeats in input -const checkWindow = (width: number, input: number): boolean => { +const checkWindow = (input: number): boolean => { + const width = String(input).length / 2 const str = String(input); - for (let patternStart = 0; patternStart + 2 * width < str.length; patternStart += width) { - const leftPatIdx = [patternStart, patternStart + width] - const rightPatIdx = [patternStart + width, patternStart + width + width] - const patternRepeated = str.slice(...leftPatIdx) === str.slice(...rightPatIdx); - if (patternRepeated) { - return true; - } - } - return false + + const leftPatIdx = [0, width] + const rightPatIdx = [width, width + width] + + const left = str.slice(...leftPatIdx) + const right = str.slice(...rightPatIdx); + + return left === right; } class DayTwo implements Solvable { @@ -24,23 +22,17 @@ class DayTwo implements Solvable { public part1(): DayTwo { const vals: [number, number][] = this.input .split(",") - .map(range => range.split("-") + .map(range => range.trim().split("-") .map(Number) as [number, number]); const invalid: number[] = []; for (const [start, end] of vals) { for (let i = start; i <= end; i++) { - // if the number is of odd length, it can't have a repeating pattern - if (String(i).length % 2 !== 0) { - continue; - } - // check for patterns with increasing width but never exceeding half the length of the number - for (let width = 2; width <= String(i).length / 2; width++) { - if (checkWindow(width, i)) { - invalid.push(i); - break; - } + if (String(i).length % 2 === 1) continue + if (checkWindow(i)) { + console.log(i) + invalid.push(i); } } }