Advertisement
nairby

2022 Day 6

Dec 6th, 2022 (edited)
1,300
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 1.30 KB | None | 0 0
  1. use std::env;
  2. use std::io::{self};
  3. use std::collections::HashSet;
  4.  
  5. fn packet_start(s: &str) -> usize {
  6.     const MARKER_SIZE: usize = 4;
  7.     let mut start = MARKER_SIZE;
  8.     for chs in s.chars().collect::<Vec<_>>().windows(MARKER_SIZE) {
  9.         let (a,b,c,d) = (chs[0],chs[1],chs[2],chs[3]);
  10.         if a != b && a != c && a != d && b != c && b != d && c != d { break }
  11.         else { start += 1; }
  12.     }
  13.     start
  14. }
  15.  
  16. fn message_start(s: &str) -> usize {
  17.     const MARKER_SIZE: usize = 14;
  18.     let mut start = MARKER_SIZE;
  19.     'outer: for chs in s.chars().collect::<Vec<_>>().windows(MARKER_SIZE) {
  20.        start += 1;
  21.        let mut char_set: HashSet<char> = HashSet::new();
  22.        for ch in chs {
  23.            if char_set.contains(ch) { continue 'outer; }
  24.             else { char_set.insert(*ch); }
  25.         }
  26.         break;
  27.     }
  28.     start - 1
  29. }
  30.  
  31. fn solve(input: &str) -> io::Result<()> {
  32.     // Input
  33.     let input_str = std::fs::read_to_string(input).unwrap();
  34.     let input_str = input_str.trim();
  35.  
  36.     // Output
  37.     println!("Part 1: {}",packet_start(input_str)); // 1578
  38.     println!("Part 2: {}",message_start(input_str)); // 2178
  39.  
  40.     Ok(())
  41. }
  42.  
  43. fn main() {
  44.     let args: Vec<String> = env::args().collect();
  45.     let filename = &args[1];
  46.     solve(&filename).unwrap();
  47. }
  48.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement