77 lines
2.0 KiB
Rust
77 lines
2.0 KiB
Rust
#![allow(dead_code)]
|
|
use std::fs::File;
|
|
use std::io;
|
|
use std::io::BufRead;
|
|
use std::path::Path;
|
|
use std::time::Instant;
|
|
|
|
fn main() {
|
|
let now = Instant::now();
|
|
part_one();
|
|
let part_one_duration = now.elapsed();
|
|
part_two();
|
|
let part_two_duration = now.elapsed();
|
|
println!(
|
|
"p1: {}ms, p2: {}ms",
|
|
part_one_duration.as_millis(),
|
|
part_two_duration.as_millis()
|
|
);
|
|
}
|
|
|
|
fn read_lines<P>(filename: P) -> io::Result<io::Lines<io::BufReader<File>>>
|
|
where
|
|
P: AsRef<Path>,
|
|
{
|
|
// note that this discards a final newline
|
|
let file = File::open(filename)?;
|
|
Ok(io::BufReader::new(file).lines())
|
|
}
|
|
|
|
fn part_one() {
|
|
if let Ok(lines) = read_lines("./inputs/input") {
|
|
let mut biggest = 0;
|
|
let mut accumulator = 0;
|
|
for line in lines {
|
|
if let Ok(calories) = line {
|
|
if calories != "" {
|
|
accumulator += calories.parse::<u32>().unwrap();
|
|
} else {
|
|
if accumulator > biggest {
|
|
biggest = accumulator
|
|
}
|
|
accumulator = 0;
|
|
}
|
|
}
|
|
}
|
|
// catching final elf
|
|
if accumulator > biggest {
|
|
biggest = accumulator
|
|
}
|
|
println!("{}", biggest);
|
|
}
|
|
}
|
|
|
|
fn part_two() {
|
|
if let Ok(lines) = read_lines("./inputs/input") {
|
|
let mut elves = Vec::new();
|
|
let mut accumulator = 0;
|
|
for line in lines {
|
|
if let Ok(calories) = line {
|
|
if calories != "" {
|
|
accumulator += calories.parse::<u32>().unwrap();
|
|
} else {
|
|
elves.push(accumulator);
|
|
accumulator = 0;
|
|
}
|
|
}
|
|
}
|
|
// catching final elf
|
|
elves.push(accumulator);
|
|
elves.sort_unstable();
|
|
println!(
|
|
"{}",
|
|
elves.pop().unwrap() + elves.pop().unwrap() + elves.pop().unwrap()
|
|
);
|
|
}
|
|
}
|