#![feature(iterator_try_collect)] #![feature(iter_next_chunk)] #![feature(associated_type_defaults)] pub trait Solution: Problem { type Answer1: std::fmt::Display + Default = String; type Answer2: std::fmt::Display + Default = String; fn part_1(input: &str) -> Result; fn part_2(input: &str) -> Result; fn solve() -> anyhow::Result<()> { println!("Day {}", Self::DAY); println!("\tpart 1: {}", Self::part_1(Self::INPUT)?); println!("\tpart 2: {}\n", Self::part_2(Self::INPUT)?); Ok(()) } } pub trait Problem { const DAY: u8; const INPUT: &'static str; } pub mod day_1; pub mod day_2; pub mod day_3; pub mod day_4; pub mod day_5; pub mod day_6; pub mod day_7; pub mod day_8;