#![allow(dead_code)] #![allow(unused_variables)] #![allow(unused_mut)] use std::env; use std::fs::File; use std::io::Read; fn main() { let args: Vec = env::args().collect(); let filename = if args.len() == 1 { "in/".to_owned() + args[0].split('/').last().unwrap() + ".pzl" } else { args[1].clone() }; let mut f = File::open(filename).expect("cannot open file"); let mut content = String::new(); f.read_to_string(&mut content).expect("cannot read file"); let lines = content.trim_end().split("\n"); let mut va: Vec = Vec::new(); let mut vb: Vec = Vec::new(); for line in lines { let (a, b) = line.split_once(" ").unwrap(); va.push(a.parse().unwrap()); vb.push(b.parse().unwrap()); //println!("{} {}", l, r); } let mut vas = va.clone(); let mut vbs = vb.clone(); vas.sort(); vbs.sort(); let res1 = vas .iter() .zip(vbs.iter()) .map(|(a, b)| (a - b).abs()) .fold(0, |a, b| a + b); let res2 = va .iter() .map(|a| *a * (vb.iter().filter(move |b| *b == a).collect::>().len() as i32)) .fold(0, |a, b| a + b); println!("res1: {}", res1); println!("res2: {:?}", res2); assert_eq!(res1, 2970687); assert_eq!(res2, 23963899); }