Day 11, puzzle 2
This commit is contained in:
parent
4f5d6d7fa0
commit
876ebfcfe3
134
Cargo.lock
generated
134
Cargo.lock
generated
@ -18,9 +18,16 @@ dependencies = [
|
|||||||
"env_logger",
|
"env_logger",
|
||||||
"itertools",
|
"itertools",
|
||||||
"log",
|
"log",
|
||||||
|
"num",
|
||||||
"regex",
|
"regex",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "autocfg"
|
||||||
|
version = "1.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bitflags"
|
name = "bitflags"
|
||||||
version = "1.3.2"
|
version = "1.3.2"
|
||||||
@ -79,6 +86,12 @@ dependencies = [
|
|||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fuchsia-cprng"
|
||||||
|
version = "0.1.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hermit-abi"
|
name = "hermit-abi"
|
||||||
version = "0.2.6"
|
version = "0.2.6"
|
||||||
@ -152,6 +165,121 @@ version = "2.5.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
|
checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num"
|
||||||
|
version = "0.1.42"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e"
|
||||||
|
dependencies = [
|
||||||
|
"num-bigint",
|
||||||
|
"num-complex",
|
||||||
|
"num-integer",
|
||||||
|
"num-iter",
|
||||||
|
"num-rational",
|
||||||
|
"num-traits",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num-bigint"
|
||||||
|
version = "0.1.44"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e63899ad0da84ce718c14936262a41cee2c79c981fc0a0e7c7beb47d5a07e8c1"
|
||||||
|
dependencies = [
|
||||||
|
"num-integer",
|
||||||
|
"num-traits",
|
||||||
|
"rand",
|
||||||
|
"rustc-serialize",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num-complex"
|
||||||
|
version = "0.1.43"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b288631d7878aaf59442cffd36910ea604ecd7745c36054328595114001c9656"
|
||||||
|
dependencies = [
|
||||||
|
"num-traits",
|
||||||
|
"rustc-serialize",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num-integer"
|
||||||
|
version = "0.1.45"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
|
||||||
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
|
"num-traits",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num-iter"
|
||||||
|
version = "0.1.43"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
|
||||||
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
|
"num-integer",
|
||||||
|
"num-traits",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num-rational"
|
||||||
|
version = "0.1.42"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ee314c74bd753fc86b4780aa9475da469155f3848473a261d2d18e35245a784e"
|
||||||
|
dependencies = [
|
||||||
|
"num-bigint",
|
||||||
|
"num-integer",
|
||||||
|
"num-traits",
|
||||||
|
"rustc-serialize",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num-traits"
|
||||||
|
version = "0.2.15"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
|
||||||
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand"
|
||||||
|
version = "0.4.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"
|
||||||
|
dependencies = [
|
||||||
|
"fuchsia-cprng",
|
||||||
|
"libc",
|
||||||
|
"rand_core 0.3.1",
|
||||||
|
"rdrand",
|
||||||
|
"winapi",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand_core"
|
||||||
|
version = "0.3.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
|
||||||
|
dependencies = [
|
||||||
|
"rand_core 0.4.2",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand_core"
|
||||||
|
version = "0.4.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rdrand"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
|
||||||
|
dependencies = [
|
||||||
|
"rand_core 0.3.1",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "regex"
|
name = "regex"
|
||||||
version = "1.7.0"
|
version = "1.7.0"
|
||||||
@ -169,6 +297,12 @@ version = "0.6.28"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
|
checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rustc-serialize"
|
||||||
|
version = "0.3.24"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustix"
|
name = "rustix"
|
||||||
version = "0.36.5"
|
version = "0.36.5"
|
||||||
|
@ -10,6 +10,7 @@ regex = "1"
|
|||||||
itertools = "^0.10"
|
itertools = "^0.10"
|
||||||
log = "^0.4"
|
log = "^0.4"
|
||||||
env_logger = "^0.10"
|
env_logger = "^0.10"
|
||||||
|
num = "^0.1"
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
name = "d1p1"
|
name = "d1p1"
|
||||||
|
@ -10,8 +10,8 @@ pub fn main() {
|
|||||||
|
|
||||||
let monkeys = day11::parse_monkeys(&util::parse_input());
|
let monkeys = day11::parse_monkeys(&util::parse_input());
|
||||||
|
|
||||||
for _ in 0..20 {
|
for _ in 0..N_ROUNDS {
|
||||||
day11::do_round(&monkeys);
|
day11::do_round(&monkeys, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
println!(
|
println!(
|
||||||
|
22
src/bin/d11p2.rs
Normal file
22
src/bin/d11p2.rs
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
use aoc22::{
|
||||||
|
day11::{self, monkey_business},
|
||||||
|
util,
|
||||||
|
};
|
||||||
|
|
||||||
|
const N_ROUNDS: usize = 10000;
|
||||||
|
|
||||||
|
pub fn main() {
|
||||||
|
env_logger::init();
|
||||||
|
|
||||||
|
let monkeys = day11::parse_monkeys(&util::parse_input());
|
||||||
|
|
||||||
|
for _ in 0..N_ROUNDS {
|
||||||
|
day11::do_round(&monkeys, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
println!(
|
||||||
|
"Monkey business after {} rounds is {}",
|
||||||
|
N_ROUNDS,
|
||||||
|
monkey_business(&monkeys)
|
||||||
|
);
|
||||||
|
}
|
20
src/day11.rs
20
src/day11.rs
@ -1,6 +1,7 @@
|
|||||||
use std::{borrow::BorrowMut, cell::RefCell, collections::VecDeque};
|
use std::{cell::RefCell, collections::VecDeque};
|
||||||
|
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
|
use num::Integer;
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
@ -137,7 +138,12 @@ fn parse_op_kind(s: &str) -> OpKind {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn do_round(monkeys: &Vec<RefCell<Monkey>>) {
|
pub fn do_round(monkeys: &Vec<RefCell<Monkey>>, do_worry: bool) {
|
||||||
|
let overall_mod = monkeys
|
||||||
|
.iter()
|
||||||
|
.map(|m| m.borrow().test.div)
|
||||||
|
.reduce(|acc, div| acc.lcm(&div))
|
||||||
|
.unwrap();
|
||||||
for n in 0..monkeys.len() {
|
for n in 0..monkeys.len() {
|
||||||
let mut monkey = monkeys.get(n).unwrap().borrow_mut();
|
let mut monkey = monkeys.get(n).unwrap().borrow_mut();
|
||||||
log::debug!("Monkey {}", n);
|
log::debug!("Monkey {}", n);
|
||||||
@ -145,21 +151,23 @@ pub fn do_round(monkeys: &Vec<RefCell<Monkey>>) {
|
|||||||
monkey.activity += 1;
|
monkey.activity += 1;
|
||||||
let mut item = monkey.items.pop_front().unwrap();
|
let mut item = monkey.items.pop_front().unwrap();
|
||||||
log::debug!(" Monkey inspects an item with a worry level of {}.", item);
|
log::debug!(" Monkey inspects an item with a worry level of {}.", item);
|
||||||
item = run_op(&monkey.op, item);
|
item = run_op(&monkey.op, item) % overall_mod;
|
||||||
log::debug!(" Worry level increases to {}.", item);
|
log::debug!(" Worry level increases to {}.", item);
|
||||||
|
if do_worry {
|
||||||
item /= 3;
|
item /= 3;
|
||||||
log::debug!(
|
log::debug!(
|
||||||
" Monkey gets bored with item. Worry level is divided by 3 to {}.",
|
" Monkey gets bored with item. Worry level is divided by 3 to {}.",
|
||||||
item
|
item
|
||||||
);
|
);
|
||||||
|
}
|
||||||
let target = if item % monkey.test.div == 0 {
|
let target = if item % monkey.test.div == 0 {
|
||||||
|
log::debug!("Current worry level is divisible by {}", monkey.test.div);
|
||||||
|
monkey.test.target_true
|
||||||
|
} else {
|
||||||
log::debug!(
|
log::debug!(
|
||||||
"Current worry level is not divisible by {}",
|
"Current worry level is not divisible by {}",
|
||||||
monkey.test.div
|
monkey.test.div
|
||||||
);
|
);
|
||||||
monkey.test.target_true
|
|
||||||
} else {
|
|
||||||
log::debug!("Current worry level is divisible by {}", monkey.test.div);
|
|
||||||
monkey.test.target_false
|
monkey.test.target_false
|
||||||
};
|
};
|
||||||
log::debug!(
|
log::debug!(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user