Advertisement
Guest User

AoC day 9 part 2 solution

a guest
Dec 10th, 2024
254
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 1.44 KB | Software | 0 0
  1. const fs = require('fs');
  2.  
  3. const data = fs
  4.     .readFileSync('./input.txt')
  5.     .toString()
  6.     .trim()
  7.     .replace(/\r/g, '')
  8.     .split('')
  9.     .map(Number);
  10.  
  11. const unpackedDisk = [];
  12.  
  13. for (let i = 0; i < data.length; i++) {
  14.     const file = [];
  15.     for (let j = data[i]; j > 0; j--) {
  16.         if (i % 2 === 0) {
  17.             file.push(i / 2);
  18.         } else {
  19.             file.push('.');
  20.         }
  21.     }
  22.     if (file.length) {
  23.         unpackedDisk.push(file);
  24.     }
  25. }
  26.  
  27. // defrag
  28. const movedIds = [];
  29. outer: for (let i = unpackedDisk.length - 1; i >= 0; i--) {
  30.     if (unpackedDisk[i][0] !== '.' && !movedIds.includes(unpackedDisk[i][0])) {
  31.         for (let j = 0; j <= i; j++) {
  32.             if (
  33.                 unpackedDisk[j][0] === '.' &&
  34.                 unpackedDisk[j].length >= unpackedDisk[i].length
  35.             ) {
  36.                 if (unpackedDisk[j].length === unpackedDisk[i].length) {
  37.                     movedIds.push(unpackedDisk[i][0]);
  38.                     let temp = [...unpackedDisk[j]];
  39.                     unpackedDisk[j] = unpackedDisk[i];
  40.                     unpackedDisk[i] = temp;
  41.                     continue outer;
  42.                 } else {
  43.                     movedIds.push(unpackedDisk[i][0]);
  44.                     const temp = [...unpackedDisk[i]];
  45.                     unpackedDisk[i].fill('.');
  46.                     unpackedDisk.splice(
  47.                         j,
  48.                         1,
  49.                         temp,
  50.                         unpackedDisk[j].toSpliced(0, unpackedDisk[i].length)
  51.                     );
  52.                     i++;
  53.                     continue outer;
  54.                 }
  55.             }
  56.         }
  57.     }
  58. }
  59.  
  60. const defraggedDisk = unpackedDisk.flat();
  61.  
  62. let checksum = 0;
  63.  
  64. defraggedDisk.forEach((block, id) => {
  65.     if (block !== '.') {
  66.         checksum += block * id;
  67.     }
  68. });
  69.  
  70. console.log(checksum);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement