function* simulateMonkeys2(monkeys, rounds) {
const divisor = monkeys.reduce((d, monkey) => d * monkey.divisor, 1);
monkeys = copyMonkeys(monkeys);
monkeys.forEach((monkey) => monkey.inspections = 0);
for (let round = 1; round <= rounds; ++round) {
for (const monkey of monkeys) {
const items = monkey.items;
monkey.items = [];
monkey.inspections += items.length;
for (const item of items) {
const newItem = monkey.operation(item) % divisor;
const targetId = monkey.target(newItem);
monkeys[targetId].items.push(newItem);
}
}
yield {round, monkeys: copyMonkeys(monkeys)};
}
}