From 841691deb19d177e16ca5a11a761db144c4ce3e3 Mon Sep 17 00:00:00 2001 From: alex <> Date: Tue, 17 Dec 2024 11:54:12 +0100 Subject: [PATCH] Day17 - part 2 brute force, not sure it will work --- src/day17.rs | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/src/day17.rs b/src/day17.rs index 9208ae0..a38e82c 100644 --- a/src/day17.rs +++ b/src/day17.rs @@ -73,6 +73,19 @@ impl Computer { //println!("regA={} regB={} regC={} {:?}", self.regA, self.regB, self.regC, self.out); } + fn is_copy(&self) -> bool { + self.prgm.len() == self.out.len() && + self.prgm.iter().zip(self.out.clone()).all(|(a, b)| *a == b) + } + + fn reset(&mut self, regs: (u64, u64, u64)) { + self.regA = regs.0; + self.regB = regs.1; + self.regC = regs.2; + self.ptr = 0; + self.out = Vec::new(); + } + fn print(&self) -> String { let s: Vec = self.out.iter() .map(|v| v.to_string()) @@ -89,11 +102,19 @@ fn run_part1(input: &str) -> Result> { Ok(computer.print()) } -fn run_part2(input: &str) -> Result> { +fn run_part2(input: &str) -> Result> { println!("Running {} - part 2", get_day()); - let res = "".to_string(); - Ok(res) + let mut computer = Computer::new(input); + let mut regs = (computer.regA, computer.regB, computer.regC); + computer.run(); + while !computer.is_copy() { + computer.reset(regs); + computer.regA += 1; + computer.run(); + regs.0 += 1; + } + Ok(regs.0) } pub fn run(input: &str) -> Result<(), Box> { @@ -151,6 +172,12 @@ Register B: 0 Register C: 0 Program: 0,1,5,4,3,0"; + static TEXT_INPUT_6: &str = "\ +Register A: 2024 +Register B: 0 +Register C: 0 + +Program: 0,3,5,4,3,0"; #[test] fn test_part1() { @@ -164,6 +191,6 @@ Program: 0,1,5,4,3,0"; #[test] fn test_part2() { - assert_eq!("", run_part2(TEXT_INPUT_5).unwrap()); + assert_eq!(117440, run_part2(TEXT_INPUT_6).unwrap()); } } -- 2.39.5