]> aoc.elinar.fr Git - aoc_2024/commitdiff
Day13 - part 2
authoralex <>
Fri, 13 Dec 2024 10:35:50 +0000 (11:35 +0100)
committeralex <>
Fri, 13 Dec 2024 10:35:50 +0000 (11:35 +0100)
src/day13.rs

index 0c3aa2251c0b2a0b59159e3d6d15be00cdb92263..da04e1a6de64964fdbb857814b990b32db9d8ade 100644 (file)
@@ -1,23 +1,22 @@
 use std::error::Error;
 use std::path::Path;
 
-fn extract_values(line: &str) -> (i32, i32) {
+fn extract_values(line: &str) -> (i64, i64) {
     let (_, xy) = line.split_once(":").unwrap();
     let (x, y) = xy.split_once(",").unwrap();
-    let x = x[3..x.len()].parse::<i32>().unwrap();
-    let y = y[3..y.len()].parse::<i32>().unwrap();
+    let x = x[3..x.len()].parse::<i64>().unwrap();
+    let y = y[3..y.len()].parse::<i64>().unwrap();
     (x, y)
 }
 
-fn run_part1(input: &str) -> Result<u32, Box<dyn Error>> {
-    println!("Running {} - part 1", get_day());
-
-    let res: u32 = input.split("\n\n")
+fn solve(input: &str, offset: i64) -> u64 {
+    input.split("\n\n")
         .map(|list| {
             let list: Vec<_> = list.lines().collect();
             let (xa, ya) = extract_values(list[0]);
             let (xb, yb) = extract_values(list[1]);
             let (xp, yp) = extract_values(list[2]);
+            let (xp, yp) = (xp + offset, yp + offset);
             let det = xa*yb - ya*xb;
             match det {
                 0 => 0,
@@ -30,20 +29,22 @@ fn run_part1(input: &str) -> Result<u32, Box<dyn Error>> {
                     else {
                         let a = an / det;
                         let b = bn / det;
-                        (a*3 + b) as u32
+                        (a*3 + b) as u64
                     }
                 }
             }
         })
-        .sum();
+        .sum()
+}
 
-    Ok(res)
+fn run_part1(input: &str) -> Result<u64, Box<dyn Error>> {
+    println!("Running {} - part 1", get_day());
+    Ok(solve(input, 0))
 }
 
-fn run_part2(input: &str) -> Result<u32, Box<dyn Error>> {
+fn run_part2(input: &str) -> Result<u64, Box<dyn Error>> {
     println!("Running {} - part 2", get_day());
-
-    Ok(0)
+    Ok(solve(input, 10000000000000))
 }
 
 pub fn run(input: &str) -> Result<(), Box<dyn Error>> {
@@ -87,9 +88,4 @@ Prize: X=18641, Y=10279
     fn test_part1() {
         assert_eq!(480, run_part1(TEXT_INPUT).unwrap());
     }
-
-    #[test]
-    fn test_part2() {
-        assert_eq!(0, run_part2(TEXT_INPUT).unwrap());
-    }
 }