1
0

add elapsed time for each day to output

This commit is contained in:
2024-12-05 18:30:51 +01:00
parent 89b36dcb98
commit e8b494859b
2 changed files with 30 additions and 16 deletions

View File

@@ -12,9 +12,9 @@ type RiddleResult = usize;
fn part1(input: &str) -> RiddleResult { fn part1(input: &str) -> RiddleResult {
let (rules, books) = parse(input); let (rules, books) = parse(input);
books.iter().filter(|book| { books
valid_book(book, &rules) .iter()
}) .filter(|book| valid_book(book, &rules))
.map(|book| book[book.len() / 2].parse::<RiddleResult>().unwrap()) .map(|book| book[book.len() / 2].parse::<RiddleResult>().unwrap())
.sum() .sum()
} }
@@ -32,23 +32,29 @@ fn valid_book(book: &[&str], rules: &[(&str, &str)]) -> bool {
fn parse(input: &str) -> (Vec<(&str, &str)>, Vec<Vec<&str>>) { fn parse(input: &str) -> (Vec<(&str, &str)>, Vec<Vec<&str>>) {
let (a, b) = input.split_once("\n\n").unwrap(); let (a, b) = input.split_once("\n\n").unwrap();
let rules = a.lines().map(|line| line.split_once("|").unwrap()).collect_vec(); let rules = a
let books = b.lines().map(|line| line.split(",").collect_vec()).collect_vec(); .lines()
.map(|line| line.split_once("|").unwrap())
.collect_vec();
let books = b
.lines()
.map(|line| line.split(",").collect_vec())
.collect_vec();
(rules, books) (rules, books)
} }
fn part2(input: &str) -> RiddleResult { fn part2(input: &str) -> RiddleResult {
let (rules, books) = parse(input); let (rules, books) = parse(input);
books.iter().filter(|book| { books
!valid_book(book, &rules) .iter()
}) .filter(|book| !valid_book(book, &rules))
.map(|book| fix(book, &rules)) .map(|book| fix(book, &rules))
.map(|book| book[book.len() / 2].parse::<RiddleResult>().unwrap()) .map(|book| book[book.len() / 2].parse::<RiddleResult>().unwrap())
.sum() .sum()
} }
fn fix<'a>(book: &'a[&str], rules: &[(&str, &str)]) -> Vec<&'a str> { fn fix<'a>(book: &'a [&str], rules: &[(&str, &str)]) -> Vec<&'a str> {
let mut b = book.iter().copied().collect_vec(); let mut b = book.iter().copied().collect_vec();
b.sort_unstable_by(|a, b| { b.sort_unstable_by(|a, b| {
if rules.contains(&(a, b)) { if rules.contains(&(a, b)) {

View File

@@ -1,7 +1,7 @@
use std::{collections::HashMap, env::args};
use advent_of_rust_2024::*; use advent_of_rust_2024::*;
use itertools::Itertools; use itertools::Itertools;
use std::time::Instant;
use std::{collections::HashMap, env::args};
fn main() { fn main() {
let mains: HashMap<u8, fn() -> ()> = HashMap::from_iter([ let mains: HashMap<u8, fn() -> ()> = HashMap::from_iter([
@@ -18,7 +18,15 @@ fn main() {
.sorted_by_key(|entry| entry.0) .sorted_by_key(|entry| entry.0)
.for_each(|(d, f)| { .for_each(|(d, f)| {
println!("Day {d}:"); println!("Day {d}:");
let start = Instant::now();
f(); f();
let duration = start.elapsed();
println!(
"{color}{italic}Took {duration:?}{reset_formatting}",
color = "\x1b[38;5;247m",
italic = "\x1b[3m",
reset_formatting = "\x1b[0m"
);
}); });
return; return;
}; };