38 lines
869 B
JavaScript
38 lines
869 B
JavaScript
|
import * as R from "remeda";
|
||
|
|
||
|
const playTurn = (monkeys, monkey) => {
|
||
|
const max = monkeys.map( R.prop('divisible') ).reduce(
|
||
|
(a,b) => a * b
|
||
|
);
|
||
|
|
||
|
monkey.inspections += monkey.items.length;
|
||
|
|
||
|
monkey.items = monkey.items.map( i => monkey.operation(i) );
|
||
|
monkey.items = monkey.items.map( i => i % max );
|
||
|
|
||
|
monkey.items.forEach( i => {
|
||
|
monkeys[(i % monkey.divisible) ? monkey.ifFalse : monkey.ifTrue
|
||
|
].items.push(i)
|
||
|
} )
|
||
|
|
||
|
monkey.items = [];
|
||
|
|
||
|
return;
|
||
|
};
|
||
|
|
||
|
const playRound = (monkeys) => {
|
||
|
monkeys.forEach( monkey => playTurn(monkeys,monkey) );
|
||
|
return monkeys;
|
||
|
}
|
||
|
|
||
|
export default R.createPipe(
|
||
|
R.clone,
|
||
|
(monkeys) => R.times(10000, () => playRound(monkeys)),
|
||
|
R.last(),
|
||
|
R.map( R.prop('inspections') ),
|
||
|
R.sortBy( R.identity ),
|
||
|
R.reverse,
|
||
|
R.take(2),
|
||
|
R.reduce( (a,b) => a * b, 1 )
|
||
|
)
|