this repo has no description
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// }