this way I can at least claim to not have completely ignored it this year :p Change-Id: I59ab58a05e6bc217e9c6d9fa830d321ddff71d8a Reviewed-on: https://cl.tvl.fyi/c/depot/+/7608 Autosubmit: tazjin <tazjin@tvl.su> Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
		
			
				
	
	
		
			27 lines
		
	
	
	
		
			726 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			27 lines
		
	
	
	
		
			726 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
| // AoC 2022 - day 1.
 | |
| 
 | |
| fn sum_elf(elf: &str) -> usize {
 | |
|     elf.lines()
 | |
|         .map(|s| s.parse::<usize>().expect("invalid input"))
 | |
|         .sum()
 | |
| }
 | |
| 
 | |
| fn group_by_elf(input: &str) -> Vec<usize> {
 | |
|     input.rsplit("\n\n").map(sum_elf).collect()
 | |
| }
 | |
| 
 | |
| fn top_elf(input: &str) -> usize {
 | |
|     group_by_elf(&input).into_iter().max().unwrap()
 | |
| }
 | |
| 
 | |
| fn top_n_elves(n: usize, input: &str) -> usize {
 | |
|     let mut by_elf = group_by_elf(input);
 | |
|     by_elf.sort_by(|a, b| b.cmp(a)); // high->low
 | |
|     (by_elf[..n]).iter().sum()
 | |
| }
 | |
| 
 | |
| fn main() {
 | |
|     let input = std::fs::read_to_string("input").expect("input should be in file named 'input'");
 | |
|     println!("top elf: {}", top_elf(&input));
 | |
|     println!("top 3 elves: {}", top_n_elves(3, &input));
 | |
| }
 |