use std::collections::HashSet; pub fn one(input: String) { let mut left: Vec = Vec::new(); let mut right: Vec = Vec::new(); input.lines().for_each(|line| { let mut parts = line.split_whitespace(); left.push(parts.next().unwrap().parse().unwrap()); right.push(parts.next().unwrap().parse().unwrap()); }); left.sort(); right.sort(); let res = left .iter() .zip(right.iter()) .map(|(l, r)| abs(*l, *r)) .sum::(); println!("{}", res); } pub fn two(input: String) { let mut left: HashSet = HashSet::new(); let mut right: Vec = Vec::new(); input.lines().for_each(|line| { let mut parts = line.split_whitespace(); left.insert(parts.next().unwrap().parse().unwrap()); right.push(parts.next().unwrap().parse().unwrap()); }); let mut acc = 0; for r in right.iter() { if left.contains(r) { acc = acc + *r; } } println!("{}", acc); } fn abs(a: i32, b: i32) -> i32 { if a > b { a - b } else { b - a } }