Advertisement
nairby

AOC 2023 Day 6

Dec 6th, 2023
1,281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 1.63 KB | None | 0 0
  1. use std::env;
  2. use std::io::{self, prelude::*};
  3. use std::fs::File;
  4.  
  5. fn solve(input: &str) -> io::Result<()> {
  6.     // File handling
  7.     let input_str = std::fs::read_to_string(input).unwrap();
  8.     let input_str = input_str.trim();
  9.     let input: Vec<_> = input_str.lines().collect();
  10.  
  11.     // Part 1 Inputs
  12.     let times: Vec<_> = input[0]
  13.         .split_whitespace()
  14.         .skip(1)
  15.         .map(|x| x.parse::<usize>().unwrap())
  16.         .collect();
  17.     let distances: Vec<_> = input[1]
  18.         .split_whitespace()
  19.         .skip(1)
  20.         .map(|x| x.parse::<usize>().unwrap())
  21.         .collect();
  22.  
  23.     // Part 1
  24.     let mut part1 = 1;
  25.     for (time,dist) in times.iter().zip(distances.iter()) {
  26.         let ways = (1..*time)
  27.             .into_iter()
  28.             .filter(|hold| hold * (time - hold) > *dist)
  29.             .count();
  30.         if ways > 0 { part1 *= ways; }
  31.     }
  32.     println!("Part 1: {part1}"); // 800280
  33.  
  34.     // Part 2 Inputs
  35.     let time_p2 = times
  36.         .iter()
  37.         .map(|x| format!("{x}"))
  38.         .collect::<Vec<_>>()
  39.         .concat()
  40.         .parse::<usize>()
  41.         .unwrap();
  42.     let dist_p2 = distances
  43.         .iter()
  44.         .map(|x| format!("{x}"))
  45.         .collect::<Vec<_>>()
  46.         .concat()
  47.         .parse::<usize>()
  48.         .unwrap();
  49.  
  50.     // Part 2 Solve
  51.     let part2 = (1..time_p2)
  52.         .into_iter()
  53.         .filter(|hold| hold * (time_p2 - hold) > dist_p2)
  54.         .count();
  55.     println!("Part 2: {part2}"); // 45128024
  56.  
  57.     Ok(())
  58. }
  59.  
  60. fn main() {
  61.     let args: Vec<String> = env::args().collect();
  62.     let filename = &args[1];
  63.     solve(&filename).unwrap();
  64. }
  65.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement