This commit is contained in:
unintendedfraud
2023-12-09 14:00:06 +01:00
parent b091f091d5
commit 9a9c6694fd
3 changed files with 97 additions and 0 deletions
+9
View File
@@ -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" }
+2
View File
@@ -0,0 +1,2 @@
Time: 46 85 75 82
Distance: 208 1412 1257 1410
+86
View File
@@ -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<usize>,
distance: Vec<usize>,
}
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<String>) -> usize {
let data = format_data_part2(d);
let mut counts: Vec<usize> = 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<String>) -> usize {
let data = format_data_part1(d);
let mut counts: Vec<usize> = 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<String>) -> TimeDistance {
let times = d[0].split(":").collect::<Vec<&str>>()[1];
let distances = d[1].split(":").collect::<Vec<&str>>()[1];
return TimeDistance {
time: util::get_numbers_from_str(times, " "),
distance: util::get_numbers_from_str(distances, " "),
};
}
fn format_data_part2(d: &Vec<String>) -> TimeDistance {
let time = d[0].split(":").collect::<Vec<&str>>()[1]
.replace(" ", "")
.parse::<usize>()
.expect("failed to parse time");
let distance = d[1].split(":").collect::<Vec<&str>>()[1]
.replace(" ", "")
.parse::<usize>()
.expect("failed to parse distance");
return TimeDistance {
time: vec![(time)],
distance: vec![(distance)],
};
}