Ben Ashton
1 year ago
2 changed files with 5055 additions and 0 deletions
@ -0,0 +1,55 @@ |
|||||||
|
import { readFileSync } from 'node:fs'; |
||||||
|
|
||||||
|
const input = readFileSync('input', 'utf-8'); |
||||||
|
|
||||||
|
const numbers = input |
||||||
|
.split('\n') |
||||||
|
.filter(line => !!line.trim()) |
||||||
|
.map(num => parseInt(num)); |
||||||
|
|
||||||
|
function getNextPos(pos, move, len) { |
||||||
|
if (move === 0) { |
||||||
|
return pos; |
||||||
|
} else if (move > 0) { |
||||||
|
return (pos + move) % (len - 1); |
||||||
|
} else { |
||||||
|
return (len - 1) - ((len - 1 - pos + Math.abs(move)) % (len - 1)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function mix(numberArray, count=1) { |
||||||
|
const sequence = numberArray.map((move, sequence) => ({move, sequence})); |
||||||
|
|
||||||
|
for (let c = 0; c < count; c++) { |
||||||
|
for (let i = 0; i < sequence.length; i++) { |
||||||
|
const itemIndex = sequence.findIndex(item => item.sequence === i); |
||||||
|
const item = sequence[itemIndex]; |
||||||
|
|
||||||
|
const newIndex = getNextPos(itemIndex, item.move, sequence.length); |
||||||
|
|
||||||
|
sequence.splice(itemIndex, 1); |
||||||
|
sequence.splice(newIndex, 0, item); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return sequence.map(s => s.move); |
||||||
|
} |
||||||
|
|
||||||
|
function getCoordinates(mixed) { |
||||||
|
const zeroIndex = mixed.indexOf(0); |
||||||
|
const coordinates = ( |
||||||
|
mixed[(zeroIndex + 1000) % (mixed.length)] + |
||||||
|
mixed[(zeroIndex + 2000) % (mixed.length)] + |
||||||
|
mixed[(zeroIndex + 3000) % (mixed.length)] |
||||||
|
); |
||||||
|
return coordinates; |
||||||
|
} |
||||||
|
|
||||||
|
const partOneMixed = mix(numbers); |
||||||
|
const partOneCoords = getCoordinates(partOneMixed); |
||||||
|
console.log('The sum of grove coordinates for part one is:', partOneCoords); |
||||||
|
|
||||||
|
const partTwoNumbers = numbers.map(n => n * 811589153); |
||||||
|
const partTwoMixed = mix(partTwoNumbers, 10); |
||||||
|
const partTwoCoords = getCoordinates(partTwoMixed); |
||||||
|
console.log('The sum of grove coordinates for part two is:', partTwoCoords); |
Loading…
Reference in new issue