day6
This commit is contained in:
@@ -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" }
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
Time: 46 85 75 82
|
||||||
|
Distance: 208 1412 1257 1410
|
||||||
@@ -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)],
|
||||||
|
};
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user