programming puzzle solutions
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

add 2024 day1 and day2 in rust

+166 -4
+12 -4
Cargo.toml
··· 4 4 edition = "2021" 5 5 6 6 [[bin]] 7 - name = "day1" 8 - path = "src/day1/rust/mod.rs" 7 + name = "2023_day1" 8 + path = "src/2023/day1/rust/mod.rs" 9 9 10 10 [[bin]] 11 - name = "day2" 12 - path = "src/day2/rust/mod.rs" 11 + name = "2023_day2" 12 + path = "src/2023/day2/rust/mod.rs" 13 + 14 + [[bin]] 15 + name = "2024_day1" 16 + path = "src/2024/day1/rust/mod.rs" 17 + 18 + [[bin]] 19 + name = "2024_day2" 20 + path = "src/2024/day2/rust/mod.rs" 13 21 14 22 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+56
src/2024/day1/rust/mod.rs
··· 1 + pub fn part_a(input: &str) -> i32 { 2 + let mut left_list: Vec<i32> = Vec::new(); 3 + let mut right_list: Vec<i32> = Vec::new(); 4 + for line in input.lines() { 5 + let parts: Vec<&str> = line.split_whitespace().collect(); 6 + left_list.push(parts[0].parse().unwrap()); 7 + right_list.push(parts[1].parse().unwrap()); 8 + } 9 + left_list.sort(); 10 + right_list.sort(); 11 + let mut sum = 0; 12 + for (left, right) in left_list.iter().zip(right_list.iter()) { 13 + sum += (left - right).abs(); 14 + } 15 + 16 + sum 17 + } 18 + 19 + pub fn part_b(input: &str) -> i32 { 20 + let mut left_list: Vec<i32> = Vec::new(); 21 + let mut right_list: Vec<i32> = Vec::new(); 22 + for line in input.lines() { 23 + let parts: Vec<&str> = line.split_whitespace().collect(); 24 + left_list.push(parts[0].parse().unwrap()); 25 + right_list.push(parts[1].parse().unwrap()); 26 + } 27 + left_list.sort(); 28 + right_list.sort(); 29 + let mut sum = 0; 30 + for left in left_list.iter() { 31 + let mut count = 0; 32 + for right in right_list.iter() { 33 + if left == right { 34 + count += 1; 35 + } 36 + } 37 + sum += left * count; 38 + } 39 + 40 + sum 41 + } 42 + 43 + pub fn main() { 44 + let input = include_str!("../input.txt"); 45 + let example_input = include_str!("../input_example.txt"); 46 + // let example_input_b = include_str!("../input_example_b.txt"); 47 + let day: u8 = 1; 48 + println!("Day {} Example Part A: {}", day, part_a(example_input)); 49 + println!("Day {} Part A: {}", day, part_a(input)); 50 + println!("Day {} Example Part B: {}", day, part_b(example_input)); 51 + println!("Day {} Part B: {}", day, part_b(input)); 52 + } 53 + 54 + // #[cfg(test)] 55 + // mod tests { 56 + // }
+98
src/2024/day2/rust/mod.rs
··· 1 + pub fn validate_report(report: &Vec<i32>) -> bool { 2 + let mut valid = true; 3 + let direction = { 4 + if report[1] > report[0] { 5 + 1 6 + } else { 7 + -1 8 + } 9 + }; 10 + let mut diff = 0; 11 + for i in 1..report.len() { 12 + if report[i] > report[i - 1] { 13 + if direction != 1 { 14 + valid = false; 15 + break; 16 + } 17 + } else { 18 + if direction != -1 { 19 + valid = false; 20 + break; 21 + } 22 + } 23 + diff = (report[i] - report[i - 1]).abs(); 24 + if diff < 1 || diff > 3 { 25 + valid = false; 26 + break; 27 + } 28 + } 29 + if valid { 30 + return true; 31 + } else { 32 + return false; 33 + } 34 + } 35 + 36 + pub fn part_a(input: &str) -> i32 { 37 + let reports: Vec<Vec<i32>> = input 38 + .lines() 39 + .map(|line| { 40 + line.split_whitespace() 41 + .map(|num| num.parse().unwrap()) 42 + .collect() 43 + }) 44 + .collect(); 45 + let mut safe_reports = 0; 46 + for report in reports.iter() { 47 + if validate_report(report) { 48 + safe_reports += 1; 49 + } 50 + } 51 + safe_reports 52 + } 53 + 54 + pub fn part_b(input: &str) -> i32 { 55 + let reports: Vec<Vec<i32>> = input 56 + .lines() 57 + .map(|line| { 58 + line.split_whitespace() 59 + .map(|num| num.parse().unwrap()) 60 + .collect() 61 + }) 62 + .collect(); 63 + let mut safe_reports = 0; 64 + for report in reports.iter() { 65 + if validate_report(report) { 66 + safe_reports += 1; 67 + } else { 68 + let mut new_reports: Vec<Vec<i32>> = Vec::new(); 69 + for i in 0..report.len() { 70 + let mut new_report = report.clone(); 71 + new_report.remove(i); 72 + new_reports.push(new_report); 73 + } 74 + for new_report in new_reports.iter() { 75 + if validate_report(new_report) { 76 + safe_reports += 1; 77 + break; 78 + } 79 + } 80 + } 81 + } 82 + safe_reports 83 + } 84 + 85 + pub fn main() { 86 + let input = include_str!("../input.txt"); 87 + let example_input = include_str!("../input_example.txt"); 88 + // let example_input_b = include_str!("../input_example_b.txt"); 89 + let day: u8 = 1; 90 + println!("Day {} Example Part A: {}", day, part_a(example_input)); 91 + println!("Day {} Part A: {}", day, part_a(input)); 92 + println!("Day {} Example Part B: {}", day, part_b(example_input)); 93 + println!("Day {} Part B: {}", day, part_b(input)); 94 + } 95 + 96 + // #[cfg(test)] 97 + // mod tests { 98 + // }