day11 p2
This commit is contained in:
@@ -55,11 +55,16 @@ function read_monkeys(infile)
|
||||
end
|
||||
end
|
||||
|
||||
function simian_shenanigans(monkeys :: Vector{Monkey})
|
||||
function simian_shenanigans(monkeys :: Vector{Monkey}; part=1)
|
||||
modulus = prod(m.test_divisor for m in monkeys)
|
||||
for m in monkeys
|
||||
for item in m.items
|
||||
new_value = m.op(item, m.op_value)
|
||||
if part == 1
|
||||
new_value = Int(floor(new_value / 3))
|
||||
else
|
||||
new_value = mod(new_value, modulus)
|
||||
end
|
||||
new_monkey = (mod(new_value, m.test_divisor) == 0
|
||||
? m.test_result[1] : m.test_result[2])
|
||||
push!(monkeys[new_monkey].items, new_value)
|
||||
@@ -69,18 +74,24 @@ function simian_shenanigans(monkeys :: Vector{Monkey})
|
||||
end
|
||||
end
|
||||
|
||||
function monkey_business(monkeys; rounds=20)
|
||||
function monkey_business(monkeys; rounds=20, part=1)
|
||||
for _ in 1:rounds
|
||||
simian_shenanigans(monkeys)
|
||||
simian_shenanigans(monkeys, part=part)
|
||||
end
|
||||
return prod(sort([m.inspected for m in monkeys])[end-1:end])
|
||||
end
|
||||
|
||||
function test()
|
||||
@testset "monkey business" verbose=true begin
|
||||
@testset "monkey business 1" verbose=true begin
|
||||
@test monkey_business(read_monkeys("example.txt")) == 10605
|
||||
@test monkey_business(read_monkeys("input.txt")) == 64032
|
||||
end
|
||||
@testset "monkey business 2" verbose=true begin
|
||||
@test monkey_business(
|
||||
read_monkeys("example.txt"), rounds=10000, part=2) == 2713310158
|
||||
@test monkey_business(
|
||||
read_monkeys("input.txt"), rounds=10000, part=2) == 12729522272
|
||||
end
|
||||
end
|
||||
|
||||
function main()
|
||||
@@ -92,7 +103,12 @@ function main()
|
||||
monkeys = read_monkeys(infile)
|
||||
display(monkeys)
|
||||
println()
|
||||
println("monkey business ", monkey_business(monkeys))
|
||||
println("monkey business 1 ",
|
||||
monkey_business(monkeys, rounds=20, part=1))
|
||||
|
||||
monkeys = read_monkeys(infile)
|
||||
println("monkey business 2 ",
|
||||
monkey_business(monkeys, rounds=10000, part=2))
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user