2023-11-18 17:52:07 +01:00
|
|
|
#![feature(test)]
|
|
|
|
|
|
|
|
extern crate test;
|
|
|
|
|
|
|
|
#[cfg(test)]
|
|
|
|
mod tests {
|
|
|
|
use super::*;
|
|
|
|
use test::Bencher;
|
|
|
|
|
|
|
|
#[bench]
|
|
|
|
fn bench_a(b: &mut Bencher) {
|
2023-11-19 16:51:29 +01:00
|
|
|
b.iter(|| part_a(INPUT));
|
2023-11-18 17:52:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
#[bench]
|
|
|
|
fn bench_b(b: &mut Bencher) {
|
2023-11-19 16:51:29 +01:00
|
|
|
b.iter(|| part_b(INPUT));
|
2023-11-18 17:52:07 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-11-19 16:51:29 +01:00
|
|
|
const INPUT: &str = include_str!("../input.txt");
|
|
|
|
const TEST: &str = include_str!("../test.txt");
|
|
|
|
|
|
|
|
fn part_a(input: &str) {
|
|
|
|
let result: u32 = input
|
2023-11-18 16:45:50 +01:00
|
|
|
.trim()
|
|
|
|
.split("\n\n")
|
|
|
|
.map(|x| x.lines().map(|x| x.parse::<u32>().unwrap()).sum())
|
|
|
|
.max()
|
|
|
|
.unwrap();
|
2023-11-19 16:51:29 +01:00
|
|
|
println!("{}", result);
|
2023-11-18 16:45:50 +01:00
|
|
|
}
|
2023-11-18 17:52:07 +01:00
|
|
|
|
2023-11-19 16:51:29 +01:00
|
|
|
fn part_b(input: &str) {
|
|
|
|
let mut result = input
|
2023-11-18 17:52:07 +01:00
|
|
|
.trim()
|
|
|
|
.split("\n\n")
|
|
|
|
.map(|x| x.lines().map(|x| x.parse::<u32>().unwrap()).sum::<u32>())
|
2023-11-18 18:00:01 +01:00
|
|
|
.collect::<Vec<u32>>();
|
|
|
|
result.sort_unstable();
|
|
|
|
let total = result.into_iter().rev().take(3).sum::<u32>();
|
2023-11-19 16:51:29 +01:00
|
|
|
println!("{}", total);
|
2023-11-18 17:52:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
2023-11-19 16:51:29 +01:00
|
|
|
println!("Part A:");
|
|
|
|
part_a(TEST);
|
|
|
|
part_a(INPUT);
|
|
|
|
|
|
|
|
println!("\nPart B:");
|
|
|
|
part_b(TEST);
|
|
|
|
part_b(INPUT);
|
2023-11-18 17:52:07 +01:00
|
|
|
}
|