diff --git a/day 9/day_9_mark.js b/day 9/day_9_mark.js new file mode 100644 index 0000000000000000000000000000000000000000..0eb8e4434455a7e1848aa2b050ae3181438f4100 --- /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) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +