part1ref = async (input, len = 5000) => {
let numbers = input
.trim()
.split("\n")
.map((num) => parseInt(num));
const first = { index: 0, value: numbers[0], next: null, previous: null };
let current = first;
for (let i = 1; i < numbers.length; i++) {
let node = { index: i, value: numbers[i], next: null, previous: current };
current.next = node;
current = node;
}
current.next = first;
first.previous = current;
current = current.next;
let head;
for (let i = 0; i < len; i++) {
let node = current;
while (node.index != i) node = node.next;
if (node.value > 0) {
for (let move = 0; move < node.value; move++) {
let index = node.index,
value = node.value;
node.index = node.next.index;
node.value = node.next.value;
node.next.index = index;
node.next.value = value;
node = node.next;
}
} else if (node.value < 0) {
for (let move = 0; move < Math.abs(node.value); move++) {
let index = node.index,
value = node.value;
node.index = node.previous.index;
node.value = node.previous.value;
node.previous.index = index;
node.previous.value = value;
node = node.previous;
}
}
head = node;
}
return head;
let sum = [];
while (current.value != 0) current = current.next;
return current;
for (let grove = 0; grove < 3; grove++) {
for (let i = 0; i < 1000; i++) current = current.next;
sum.push(current.value);
}
return sum;
}