-

Bad JavaScript

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); // ...

/r/adventofcode Thread