#[path = "../lib.rs"] mod lib; fn intersect(vec: Vec) -> Option { let base = vec.get(0)?; for c in base.chars() { if vec[1..].iter().all(|s| s.contains(c)) { return Some(c as u8); } } return None; } fn byte_to_priority(byte: u8) -> u8 { if byte >= b'a' { return byte - b'a' + 1; } else { return byte - b'A' + 27; } } fn part1() -> u64 { let mut score = 0; for line in lib::iter_input() { let (head, tail) = line.split_at(line.len() / 2); let vec = vec![head.to_string(), tail.to_string()]; let common = intersect(vec).unwrap(); score += byte_to_priority(common) as u64; } return score; } fn part2() -> u64 { let mut score: u64 = 0; let mut vec = vec![]; for line in lib::iter_input() { vec.push(line); if vec.len() == 3 { let common = intersect(vec).unwrap(); score += byte_to_priority(common) as u64; vec = vec![]; } } return score; } fn main() { println!("part1: {}", part1()); println!("part2: {}", part2()); }