Skip to content

Instantly share code, notes, and snippets.

@devNoiseConsulting
Created January 3, 2018 03:26
Show Gist options
  • Select an option

  • Save devNoiseConsulting/08fe8e49a6ea8b63a1f1868a96880a7c to your computer and use it in GitHub Desktop.

Select an option

Save devNoiseConsulting/08fe8e49a6ea8b63a1f1868a96880a7c to your computer and use it in GitHub Desktop.
Spinlock - Advent of Code - 20171217
let spinLock_1 = function(step, target) {
let buffer = [0];
let position = 0;
for (let i = 1; i <= target; i++) {
position = (position + step) % buffer.length;
buffer.splice(++position, 0, i);
}
return buffer[position + 1];
};
let spinLock_2 = function(step, target) {
let buffer = [0],
pos = 0;
for (let i = 1; i <= target; i++) {
pos = (pos + step + 1) % i;
buffer = [...buffer.slice(0, pos), i, ...buffer.slice(pos)];
}
return buffer[buffer.indexOf(target) + 1];
};
let spinLock = spinLock_1;
let bigSpinLock = function(step, cycles, target) {
let buffer = [0];
let position = 0;
for (let i = 1; i <= cycles; i++) {
position = (position + step) % i + 1;
//buffer.splice(++position, 0, i);
if (position == 1) {
buffer[position] = i;
}
}
return buffer[1];
};
let test = 304;
let cycles = 2017;
let result = spinLock(test, cycles);
console.log(result);
test = 304;
cycles = 50000000;
result = bigSpinLock(test, cycles);
console.log(result);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment