use std::fs; fn main() { let input = fs::read_to_string("input.txt").unwrap(); let input: Vec<_> = input.split('\n') // Separate the Time and Distance lines .map(|line| { line[line.find(':').unwrap() + 1..] // Drop "Time:" and "Distance:" .split_whitespace() // Split the numbers into their own elements .flat_map(|s| s.chars()).collect::() // Combine the strings into a single one .parse::().expect("Couldn't parse number") // Parse numbers into i32 }).collect(); // Collect into Vec let time = input[0]; let dist = input[1]; let mut valid = 0; for remaining_time in 0..time { if (time - remaining_time) * remaining_time > dist { valid += 1; } } println!("{}", valid); } // use std::fs; // fn main() { // let input = fs::read_to_string("input.txt").unwrap(); // let input: Vec<_> = input.split('\n') // Separate the Time and Distance lines // .map(|line| { // line[line.find(':').unwrap() + 1..] // Drop "Time:" and "Distance:" // .split_whitespace() // Split the numbers into their own elements. // .map(|num| num.parse::().expect("Couldn't parse number")) // Parse numbers into i32 // .collect::>() // }).collect(); // collect into Vec // let mut valid_total = 1; // for round in 0..input.first().unwrap().len() { // let time = input[0][round]; // let dist = input[1][round]; // let mut valid = 0; // for remaining_time in 0..time { // if (time - remaining_time) * remaining_time > dist { // valid += 1; // } // } // valid_total *= valid; // } // println!("{}", valid_total); // }