From cc8db7abfe5246018cf7fb7d11c55af27bd0253f Mon Sep 17 00:00:00 2001 From: Mark Jeeninga <mark.jeeninga@control.lth.se> Date: Sat, 14 Dec 2024 13:13:06 +0000 Subject: [PATCH] Day 9 Mark --- day 9/day_9_mark.js | 81 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 day 9/day_9_mark.js diff --git a/day 9/day_9_mark.js b/day 9/day_9_mark.js new file mode 100644 index 0000000..0eb8e44 --- /dev/null +++ b/day 9/day_9_mark.js @@ -0,0 +1,81 @@ +range = x => [...Array(x).keys()] + +line = input.split("\n")[0] + +disk = line.split('').map(Number).reduce((x,y,i) => x.concat(i%2 ? Array(y).fill('.') : Array(y).fill(i/2)), []) + +cleaner = () => { + while(disk[disk.length-1] == '.') + disk.pop() +} + +popper = () => { + cleaner() + return disk.pop() +} + +range(disk.length).map(i =>{ + if(disk[i] === '.') + disk[i] = popper() + cleaner() +}) + +output1 = disk.reduce((x,y,i) => x+Number(y)*i,0) + +//// + +range = x => [...Array(x).keys()] + +line = input.split("\n")[0] + +numbers = line.split('').map(Number) + +disk = numbers.reduce((x,y,i) => x.concat(i%2 ? Array(y).fill('.') : Array(y).fill(i/2)), []) + +nr_files = (numbers.length+1)/2 +file_lengths = range(nr_files).map(id => numbers[id*2]) +find_space = l => disk.map(x => x == '.' ? '.' : 'X').join('').indexOf(Array(l).fill('.').join('')) + +range(nr_files).map(x => { + id = nr_files - 1 - x + l = file_lengths[id] + j = find_space(l) + if(j > -1){ + i = range(id*2).reduce((y,z) => y+numbers[z], 0) + if(j < i){ + disk.fill( id, j, j + l) + disk.fill('.', i, i + l) + } + } +}) + +output2 = disk.reduce((x,y,i) => x+Number(y == '.' ? 0 : y)*i,0) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- GitLab