day 9 part one finally done

This commit is contained in:
2024-12-14 14:03:47 -05:00
parent c6b5605022
commit 2a8a0bb280

View File

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