1
0

day 5 part 1

This commit is contained in:
2024-12-05 09:34:20 +01:00
parent 9ab3453b02
commit ac69934667
3 changed files with 96 additions and 0 deletions

94
src/day05.rs Normal file
View File

@@ -0,0 +1,94 @@
use itertools::Itertools;
use std::fs::read_to_string;
pub fn day_main() {
let input = read_to_string("input/day05.txt").unwrap();
let input = input.trim();
println!(" part1: {}", part1(input));
println!(" part2: {}", part2(input));
}
type RiddleResult = usize;
fn part1(input: &str) -> RiddleResult {
let (rules, books) = parse(input);
books.iter().filter(|book| {
valid_book(book, &rules)
})
.inspect(|v| println!("{v:?}"))
.map(|book| book[book.len() / 2].parse::<RiddleResult>().unwrap())
.inspect(|v| println!("{v:?}"))
.sum()
}
fn valid_book(book: &[&str], rules: &[(&str, &str)]) -> bool {
for (i, a) in book.iter().enumerate() {
for b in book.iter().skip(i + 1) {
if rules.contains(&(b, a)) {
return false;
}
}
}
true
}
fn parse(input: &str) -> (Vec<(&str, &str)>, Vec<Vec<&str>>) {
let (a, b) = input.split_once("\n\n").unwrap();
let rules = a.lines().map(|line| line.split_once("|").unwrap()).collect_vec();
let books = b.lines().map(|line| line.split(",").collect_vec()).collect_vec();
(rules, books)
}
fn part2(input: &str) -> RiddleResult {
0
}
#[cfg(test)]
mod test {
use crate::day05::valid_book;
use super::{part1, part2};
const TEST_INPUT: &str = r"47|53
97|13
97|61
97|47
75|29
61|13
75|53
29|13
97|29
53|29
61|53
97|53
61|29
47|13
75|47
97|75
47|61
75|61
47|29
75|13
53|13
75,47,61,53,29
97,61,53,29,13
75,29,13
75,97,47,61,53
61,13,29
97,13,75,29,47
";
#[test]
fn test1() {
assert!(valid_book(&vec!["97", "5", "13"], &vec![("97", "13")]));
assert!(!valid_book(&vec!["13", "5", "97"], &vec![("97", "13")]));
assert_eq!(part1(TEST_INPUT), 143);
}
#[test]
fn test2() {
// assert_eq!(part2(TEST_INPUT), 9);
}
}

View File

@@ -2,3 +2,4 @@ pub mod day01;
pub mod day02; pub mod day02;
pub mod day03; pub mod day03;
pub mod day04; pub mod day04;
pub mod day05;

View File

@@ -9,6 +9,7 @@ fn main() {
(2, day02::day_main), (2, day02::day_main),
(3, day03::day_main), (3, day03::day_main),
(4, day04::day_main), (4, day04::day_main),
(5, day05::day_main),
]); ]);
let day: Option<u8> = args().nth(1).and_then(|a| a.parse().ok()); let day: Option<u8> = args().nth(1).and_then(|a| a.parse().ok());
let Some(day) = day else { let Some(day) = day else {