main.rs (864B)
1 use std::cmp::Reverse; 2 use std::collections::BinaryHeap; 3 4 fn main() { 5 let input = std::fs::read_to_string("input.txt") 6 .unwrap() 7 .trim() 8 .split("\n\n") 9 .map(|x| x.split('\n').map(|x| x.parse::<i32>().unwrap()).collect()) 10 .collect::<Vec<Vec<i32>>>(); 11 // 71934 12 println!("Part 1: {}", part_1(&input)); 13 // 211447 14 println!("Part 2: {}", part_2(&input, 3)); 15 } 16 17 fn part_1(input: &Vec<Vec<i32>>) -> i32 { 18 (0..input.len()) 19 .map(|i| input[i].iter().sum()) 20 .max() 21 .unwrap() 22 } 23 24 fn part_2(input: &Vec<Vec<i32>>, top_count: usize) -> i32 { 25 let mut top = BinaryHeap::new(); 26 for s in (0..input.len()).map(|i| input[i].iter().sum::<i32>()) { 27 top.push(Reverse(s)); 28 while top.len() > top_count { 29 top.pop(); 30 } 31 } 32 top.iter().map(|r| r.0).sum() 33 }