Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::env;
- use std::io::{self};
- use std::collections::HashSet;
- fn packet_start(s: &str) -> usize {
- const MARKER_SIZE: usize = 4;
- let mut start = MARKER_SIZE;
- for chs in s.chars().collect::<Vec<_>>().windows(MARKER_SIZE) {
- let (a,b,c,d) = (chs[0],chs[1],chs[2],chs[3]);
- if a != b && a != c && a != d && b != c && b != d && c != d { break }
- else { start += 1; }
- }
- start
- }
- fn message_start(s: &str) -> usize {
- const MARKER_SIZE: usize = 14;
- let mut start = MARKER_SIZE;
- 'outer: for chs in s.chars().collect::<Vec<_>>().windows(MARKER_SIZE) {
- start += 1;
- let mut char_set: HashSet<char> = HashSet::new();
- for ch in chs {
- if char_set.contains(ch) { continue 'outer; }
- else { char_set.insert(*ch); }
- }
- break;
- }
- start - 1
- }
- fn solve(input: &str) -> io::Result<()> {
- // Input
- let input_str = std::fs::read_to_string(input).unwrap();
- let input_str = input_str.trim();
- // Output
- println!("Part 1: {}",packet_start(input_str)); // 1578
- println!("Part 2: {}",message_start(input_str)); // 2178
- 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