]> aoc.elinar.fr Git - aoc_2024/commitdiff
Day05 - part 2
authoralex <>
Thu, 5 Dec 2024 08:42:52 +0000 (09:42 +0100)
committeralex <>
Thu, 5 Dec 2024 08:46:49 +0000 (09:46 +0100)
src/day05.rs

index d7fd970cd0972f44199295f29c8a839915f7eed1..0133eb0e72539cc8fb9d3ea08cdffca33765d46e 100644 (file)
@@ -63,7 +63,29 @@ fn run_part1(input: &str) -> Result<u32, Box<dyn Error>> {
 fn run_part2(input: &str) -> Result<u32, Box<dyn Error>> {
     println!("Running {} - part 2", get_day());
 
-    Ok(0)
+    let puzzle = Puzzle::new(input);
+
+    let res = puzzle.lines.iter()
+        .filter(|l| !puzzle.is_ordered(l))
+        .map(|l| {
+            let mut pages = l.clone();
+            while !puzzle.is_ordered(&pages) {
+                for i in 1..pages.len() {
+                    let v = pages[i];
+                    for j in 0..i {
+                        if puzzle.order.get(&v).is_some() && puzzle.order.get(&v).unwrap().contains(&pages[j]) {
+                            let tmp = pages[j];
+                            pages[j] = pages[i];
+                            pages[i] = tmp;
+                        }
+                    }
+                }
+            }
+            pages[pages.len()/2]
+        })
+        .sum();
+
+    Ok(res)
 }
 
 pub fn run(input: &str) -> Result<(), Box<dyn Error>> {
@@ -122,6 +144,6 @@ mod tests {
 
     #[test]
     fn test_part2() {
-        assert_eq!(0, run_part2(TEXT_INPUT).unwrap());
+        assert_eq!(123, run_part2(TEXT_INPUT).unwrap());
     }
 }