Add day 1

This commit is contained in:
2022-12-01 12:10:44 +00:00
commit 5f6842ba9e
9 changed files with 304 additions and 0 deletions
+57
View File
@@ -0,0 +1,57 @@
use aoc2022::StdError;
use std::fs::File;
use std::io::{BufRead, BufReader};
struct BlanklineSplitter<T: Iterator> {
iter: T,
}
impl<T: Iterator<Item = String>> BlanklineSplitter<T> {
fn new(iter: T) -> Self {
BlanklineSplitter { iter }
}
}
impl<T: Iterator<Item = String>> Iterator for BlanklineSplitter<T> {
type Item = Vec<String>;
fn next(&mut self) -> Option<Self::Item> {
let mut acc = vec![];
loop {
match self.iter.next().as_deref() {
Some("") => {
// Skip over multiple empty lines
if !acc.is_empty() {
break;
}
}
Some(l) => acc.push(l.into()),
None => break,
}
}
if acc.is_empty() {
return None;
} else {
return Some(acc);
}
}
}
fn main() -> StdError<()> {
let lines = BufReader::new(File::open("input/day1.txt")?)
.lines()
.filter_map(Result::ok);
let mut sums: Vec<_> = BlanklineSplitter::new(lines)
.map(|e| {
e.iter()
.map(|l| l.parse::<u32>())
.filter_map(Result::ok)
.sum::<u32>()
})
.collect();
sums.sort_by(|a, b| b.cmp(a));
let max = sums.iter().max().unwrap();
println!("Part 1: {}", max);
let top3 = sums[0..3].iter().sum::<u32>();
println!("Part 2: {}", top3);
Ok(())
}
+1
View File
@@ -0,0 +1 @@
pub type StdError<T> = Result<T, Box<dyn std::error::Error>>;
+3
View File
@@ -0,0 +1,3 @@
fn main() {
println!("Hello, world!");
}