diff --git a/09/index.ts b/09/index.ts index fc3b35f..d74dbe7 100644 --- a/09/index.ts +++ b/09/index.ts @@ -1,7 +1,7 @@ import fs from "node:fs"; import { printTime, now, toNum } from "../util"; -const test = true; +const test = false; const data = fs.readFileSync( test ? "./inputs/testinput" : "./inputs/input", @@ -9,36 +9,42 @@ const data = fs.readFileSync( ); let timer = now.instant(); + +let sparceArray = data + .split("\n") + .slice(0, -1)[0] + .split("") + .map(toNum) + .reduce((disk, curr, index) => { + const fill = index % 2 === 0 ? index / 2 : -1; // -1 represents free space + return [...disk, ...Array.from({ length: curr }, () => fill)]; + }, [] as Array); + +let rightCursor = sparceArray.length - 1; +let leftCursor = 0; +while (leftCursor < rightCursor) { + if (sparceArray[leftCursor] === -1) { + while (sparceArray[rightCursor] === -1) { + rightCursor--; + } + if (leftCursor > rightCursor) { + // don't let them overrun each other + break; + } + sparceArray[leftCursor] = sparceArray[rightCursor]; + sparceArray[rightCursor] = -1; + } + leftCursor++; +} + console.log( "part one:", - data - .split("\n") - .slice(0, -1)[0] - .split("") - .map(toNum) - .reduce((disk, curr, index) => { - const fill = index % 2 === 0 ? index / 2 : -1; // -1 represents free space - return [...disk, ...Array.from({ length: curr }, () => fill)]; - }, [] as Array) - .reduce((disk, current, i, a) => { - console.log(disk, current, i, a); - if (current === -1) { - while (true) { - let tail = a.pop(); - if (tail === -1 || tail === undefined) { - continue; - } else { - return [...disk, tail]; - } - } - } else { - return [...disk, current]; - } - }, [] as Array) - .reduce((checksum, curr, i) => { - console.log(curr, i); + sparceArray.reduce((checksum, curr, i) => { + if (curr !== -1) { return checksum + curr * i; - }, 0), + } + return checksum; + }, 0), printTime(now.instant().since(timer)) );