From 9a9c6694fd2328bdcd59aeb6b5bbdebac45df1f4 Mon Sep 17 00:00:00 2001 From: unintendedfraud Date: Sat, 9 Dec 2023 14:00:06 +0100 Subject: [PATCH] day6 --- day6/Cargo.toml | 9 +++++ day6/data.txt | 2 ++ day6/src/main.rs | 86 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 97 insertions(+) create mode 100644 day6/Cargo.toml create mode 100644 day6/data.txt create mode 100644 day6/src/main.rs diff --git a/day6/Cargo.toml b/day6/Cargo.toml new file mode 100644 index 0000000..382d879 --- /dev/null +++ b/day6/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "day6" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +util = { path = "../util" } diff --git a/day6/data.txt b/day6/data.txt new file mode 100644 index 0000000..f0fce7b --- /dev/null +++ b/day6/data.txt @@ -0,0 +1,2 @@ +Time: 46 85 75 82 +Distance: 208 1412 1257 1410 diff --git a/day6/src/main.rs b/day6/src/main.rs new file mode 100644 index 0000000..d16c8a1 --- /dev/null +++ b/day6/src/main.rs @@ -0,0 +1,86 @@ +// Note: There must be a mathematical equation to prevent looping through every results +// Couldn't figure it out :( + +struct TimeDistance { + time: Vec, + distance: Vec, +} + +fn main() { + let data = util::get_data("data.txt"); + + println!("## part 1: {} ##", part1_solution(&data)); + println!("## part 2: {} ##", part2_solution(&data)); +} + +fn part2_solution(d: &Vec) -> usize { + let data = format_data_part2(d); + + let mut counts: Vec = Vec::new(); + + for i in 0..data.time.len() { + let t = data.time[i]; + let d = data.distance[i]; + + let mut count = 0; + + for j in 0..t { + if j * (t - j) > d { + count += 1; + } + } + + counts.push(count); + } + + return counts.iter().product(); +} + +fn part1_solution(d: &Vec) -> usize { + let data = format_data_part1(d); + + let mut counts: Vec = Vec::new(); + + for i in 0..data.time.len() { + let t = data.time[i]; + let d = data.distance[i]; + + let mut count = 0; + + for j in 0..t { + if j * (t - j) > d { + count += 1; + } + } + + counts.push(count); + } + + return counts.iter().product(); +} + +fn format_data_part1(d: &Vec) -> TimeDistance { + let times = d[0].split(":").collect::>()[1]; + let distances = d[1].split(":").collect::>()[1]; + + return TimeDistance { + time: util::get_numbers_from_str(times, " "), + distance: util::get_numbers_from_str(distances, " "), + }; +} + +fn format_data_part2(d: &Vec) -> TimeDistance { + let time = d[0].split(":").collect::>()[1] + .replace(" ", "") + .parse::() + .expect("failed to parse time"); + let distance = d[1].split(":").collect::>()[1] + .replace(" ", "") + .parse::() + .expect("failed to parse distance"); + + return TimeDistance { + time: vec![(time)], + distance: vec![(distance)], + }; +}