2024 day 9 part 1 in javascript
This commit is contained in:
parent
82a96a263e
commit
32f477ea4e
55
2024/09/solution.js
Normal file
55
2024/09/solution.js
Normal file
|
@ -0,0 +1,55 @@
|
|||
|
||||
const input = (await Bun.file("input.txt").text()).trim()
|
||||
|
||||
// const input = "12345";
|
||||
|
||||
const files = [];
|
||||
|
||||
const spaces = [];
|
||||
|
||||
let pos = 0;
|
||||
for (let i = 0; i < input.length; i++ ) {
|
||||
const size = parseInt(input[i])
|
||||
if (i % 2 == 0) {
|
||||
files.push({size, id: i / 2, start: pos,})
|
||||
} else {
|
||||
spaces.push({size, start: pos})
|
||||
}
|
||||
pos += size;
|
||||
}
|
||||
|
||||
const inserted = [];
|
||||
|
||||
let j = 0;
|
||||
let end;
|
||||
for (let i = files.length - 1; j < spaces.length; i--) {
|
||||
const file = files[i];
|
||||
|
||||
let rem = file.size;
|
||||
while (rem > 0) {
|
||||
const space = spaces[j];
|
||||
if (space.start > file.start) {
|
||||
end = file.start + file.size;
|
||||
break;
|
||||
};
|
||||
const amt = Math.min(space.size, files[i].size)
|
||||
|
||||
spaces[j] = {size: space.size - amt, start: space.start + amt};
|
||||
inserted.push({id: file.id, start: space.start, size: amt,})
|
||||
files[i] = {id: file.id, start: file.start, size: files[i].size - amt,};
|
||||
rem -= amt;
|
||||
|
||||
if (amt == space.size) j++
|
||||
}
|
||||
|
||||
if (end) break
|
||||
}
|
||||
|
||||
const newfiles = files.concat(inserted)
|
||||
.filter(file => file.size > 0)
|
||||
.sort((a, b) => a.start > b.start)
|
||||
|
||||
const checksum = newfiles.reduce((acc, current) => acc + (current.id * current.size * (current.start + (current.size - 1) / 2)), 0)
|
||||
|
||||
console.log(checksum)
|
||||
|
Loading…
Reference in a new issue