Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::env;
- use std::io::{self, prelude::*};
- use std::fs::File;
- fn solve(input: &str) -> io::Result<()> {
- // File handling
- let input_str = std::fs::read_to_string(input).unwrap();
- let input_str = input_str.trim();
- let input: Vec<_> = input_str.lines().collect();
- // Part 1 Inputs
- let times: Vec<_> = input[0]
- .split_whitespace()
- .skip(1)
- .map(|x| x.parse::<usize>().unwrap())
- .collect();
- let distances: Vec<_> = input[1]
- .split_whitespace()
- .skip(1)
- .map(|x| x.parse::<usize>().unwrap())
- .collect();
- // Part 1
- let mut part1 = 1;
- for (time,dist) in times.iter().zip(distances.iter()) {
- let ways = (1..*time)
- .into_iter()
- .filter(|hold| hold * (time - hold) > *dist)
- .count();
- if ways > 0 { part1 *= ways; }
- }
- println!("Part 1: {part1}"); // 800280
- // Part 2 Inputs
- let time_p2 = times
- .iter()
- .map(|x| format!("{x}"))
- .collect::<Vec<_>>()
- .concat()
- .parse::<usize>()
- .unwrap();
- let dist_p2 = distances
- .iter()
- .map(|x| format!("{x}"))
- .collect::<Vec<_>>()
- .concat()
- .parse::<usize>()
- .unwrap();
- // Part 2 Solve
- let part2 = (1..time_p2)
- .into_iter()
- .filter(|hold| hold * (time_p2 - hold) > dist_p2)
- .count();
- println!("Part 2: {part2}"); // 45128024
- Ok(())
- }
- fn main() {
- let args: Vec<String> = env::args().collect();
- let filename = &args[1];
- solve(&filename).unwrap();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement