diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2f7896d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +target/ diff --git a/2024/day1/Cargo.lock b/2024/day1/Cargo.lock new file mode 100644 index 0000000..ae5bfe8 --- /dev/null +++ b/2024/day1/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "day1" +version = "0.1.0" diff --git a/2024/day1/Cargo.toml b/2024/day1/Cargo.toml new file mode 100644 index 0000000..fb6b7ec --- /dev/null +++ b/2024/day1/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "day1" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/2024/day1/src/main.rs b/2024/day1/src/main.rs new file mode 100644 index 0000000..86fd15a --- /dev/null +++ b/2024/day1/src/main.rs @@ -0,0 +1,49 @@ +fn read_values() -> (Vec, Vec) { + let string = std::fs::read_to_string("./input.txt").unwrap(); + let mut left_vec = vec![]; + let mut right_vec = vec![]; + + for line in string.lines() { + let mut values = line.split_whitespace(); + let left_value: i32 = values.next().unwrap().parse().unwrap(); + left_vec.push(left_value); + let right_value: i32 = values.next().unwrap().parse().unwrap(); + right_vec.push(right_value); + } + + return (left_vec, right_vec); +} + +fn task1() { + let (mut left_vec, mut right_vec) = read_values(); + + left_vec.sort(); + right_vec.sort(); + + let mut sum = 0; + for idx in 0..left_vec.len() { + sum = sum + (left_vec[idx] - right_vec[idx]).abs(); + } + + println!("Task 1 Sum: {}", sum); +} + +fn task2() { + let (left_vec, right_vec) = read_values(); + + let mut sum = 0; + for left_number in left_vec.iter() { + let occurences = right_vec + .iter() + .filter(|&candidate| candidate == left_number) + .count() as i32; + sum += left_number * occurences; + } + + println!("Task 2 Sum: {}", sum); +} + +fn main() { + task1(); + task2(); +}