heh
bendn 2023-12-20
parent 8f70bc1 · commit 7186963
-rw-r--r--src/main.rs35
1 files changed, 27 insertions, 8 deletions
diff --git a/src/main.rs b/src/main.rs
index 9b13ea7..a848d68 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -82,9 +82,16 @@ impl<'a> Module<'a> {
}
}
-pub fn run(i: &str) -> usize {
+pub fn run(i: &str) -> u64 {
let i = i.行();
+ let mut from = HashMap::from([
+ (&b"xp"[..], None::<u64>),
+ (&b"fc"[..], None),
+ (&b"dd"[..], None),
+ (&b"fh"[..], None),
+ ]);
+
let mut modules = HashMap::new();
let mut rest = vec![];
i.map(|x| {
@@ -148,8 +155,13 @@ pub fn run(i: &str) -> usize {
},
);
}
-
- fn push(modules: &mut HashMap<&[u8], Module<'_>>) -> (usize, usize) {
+ let mut lens = vec![];
+ fn push(
+ modules: &mut HashMap<&[u8], Module<'_>>,
+ root: &mut HashMap<&[u8], Option<u64>>,
+ lens: &mut Vec<u64>,
+ when: u64,
+ ) -> (usize, usize) {
let (mut lo, mut hi) = (0, 0);
let mut stack = VecDeque::new();
stack.push_back((&b"upstairs"[..], &b"broadcaster"[..], false));
@@ -159,6 +171,14 @@ pub fn run(i: &str) -> usize {
} else {
lo += 1;
}
+ if !x && let Some(x) = root.get_mut(to) {
+ if let Some(y) = x {
+ lens.push(when - *y);
+ root.remove(to);
+ } else {
+ *x = Some(when);
+ }
+ }
if let Some(o) = modules.get_mut(to) {
o.pass(to, m, x, &mut stack)
};
@@ -166,11 +186,10 @@ pub fn run(i: &str) -> usize {
(lo, hi)
}
- let (lo, hi) = (0..1000).fold((0, 0), |(lo, hi), _| {
- let (lo2, hi2) = push(&mut modules);
- (lo + lo2, hi + hi2)
- });
- lo * hi
+ for x in 0..1000000 {
+ push(&mut modules, &mut from, &mut lens, x);
+ }
+ util::lcm(lens)
}
fn main() {