Part 1 ` console.log((function (input) { let banks = input.split('\t').map(Number); let cycles = 0; let states = []; let currentState = null; let max = 0; let index = 0;
for (;;) { if (states.indexOf(currentState) > -1) { break; }
states.push(banks.join(''));
for (let i = 0; i < banks.length; i++) {
if (i == 0) {
max = banks[i];
index = i;
} else if (banks[i] >= max) {
if (banks[i] == max) {
if (i < index) {
index = i;
}
} else {
index = i;
max = banks[i];
}
}
}
let toggle = true;
for (let n = banks[index]; n > 0 ;) {
if (toggle) {
banks[index] = 0;
toggle = false;
}
// modulo
index = index + 1 == banks.length ? 0 : index + 1;
banks[index] += 1;
--n;
}
currentState = banks.join('');
++cycles;
}
return cycles; })(input)); `
Part 2
// ...
states.length - states.indexOf(currentState);
// ...