this repo has no description
at main 66 lines 1.8 kB view raw
1// pub trait Day { 2// type Parsed; 3// fn parse(input: &str) -> Self::Parsed; 4// fn part1(data: &Self::Parsed) -> i64; 5// fn part2(data: &Self::Parsed) -> i64; 6// } 7 8// #[macro_export] 9// macro_rules! day { 10// ($name:ident, $num:literal) => { 11// pub struct $name; 12 13// impl $name { 14// pub fn run(test: bool) -> (i64, i64) { 15// let raw = if test { 16// include_str!(concat!("../../inputs/", $num, ".test")) 17// } else { 18// include_str!(concat!("../../inputs/", $num, ".txt")) 19// }; 20// let parsed = <Self as Day>::parse(raw); 21// (<Self as Day>::part1(&parsed), <Self as Day>::part2(&parsed)) 22// } 23// } 24// }; 25// } 26 27pub trait Day: Sized { 28 type Parsed; 29 fn parse(input: &'static str) -> Self::Parsed; 30 fn part1(&self) -> i64; 31 fn part2(&self) -> i64; 32} 33 34#[macro_export] 35macro_rules! day { 36 ($name:ident, $num:literal, $parsed:ty) => { 37 pub struct $name { 38 data: $parsed, 39 } 40 41 impl $name { 42 pub fn new(test: bool) -> Self { 43 let raw = if test { 44 include_str!(concat!("../../inputs/", $num, ".test")) 45 } else { 46 include_str!(concat!("../../inputs/", $num, ".txt")) 47 }; 48 Self { 49 data: <Self as Day>::parse(raw), 50 } 51 } 52 } 53 }; 54} 55 56// day!(Day2, "2", Vec<(i64, i64)>); 57 58// impl Day for Day2 { 59// type Parsed = Vec<(i64, i64)>; 60// fn parse(input: &str) -> Self::Parsed { /* ... */ 61// } 62// fn part1(&self) -> i64 { /* uses self.data */ 63// } 64// fn part2(&self) -> i64 { /* uses self.data */ 65// } 66// }