···1111# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
12121313[dependencies]
1414+chrono = { version = "0.4.31", features = ["serde"] }
1415indexmap = "1.9.2"
1516nom = "7"
1717+paste = "1.0.14"
data/day1.txt
data/2022/day1.txt
data/day10.txt
data/2022/day10.txt
data/day11.txt
data/2022/day11.txt
data/day12.txt
data/2022/day12.txt
data/day2.txt
data/2022/day2.txt
data/day22.txt
data/2022/day22.txt
data/day3.txt
data/2022/day3.txt
data/day4.txt
data/2022/day4.txt
data/day5.txt
data/2022/day5.txt
data/day6.txt
data/2022/day6.txt
data/day7.txt
data/2022/day7.txt
data/day8.txt
data/2022/day8.txt
data/day9.txt
data/2022/day9.txt
+15-8
src/lib/input.rs
···1111}
12121313pub struct Day {
1414- _day: u8,
1414+ day: u8,
1515+ year: u16,
1516}
16171718pub enum Part {
···23242425impl Debug for Day {
2526 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
2626- f.write_str(&format!("{}", self._day))
2727+ f.write_str(&format!("{}", self.day))
2728 }
2829}
29303030-impl TryFrom<u8> for Day {
3131+impl TryFrom<(u8, u16)> for Day {
3132 type Error = &'static str;
3232- fn try_from(value: u8) -> Result<Self, Self::Error> {
3333- if (1..=25).contains(&value) {
3434- Ok(Day { _day: value })
3333+ fn try_from(value: (u8, u16)) -> Result<Self, Self::Error> {
3434+ if (1..=25).contains(&value.0) {
3535+ Ok(Day {
3636+ day: value.0,
3737+ year: value.1,
3838+ })
3539 } else {
3636- Err("Day value should be between 1 and 25")
4040+ Err("Day and Year values are invalid")
3741 }
3842 }
3943}
···6872 // };
69737074 // let data_file_path = PathBuf::new().join("data").join(&d).join(p);
7171- let data_file_path = PathBuf::new().join("data").join(format!("day{}.txt", day._day));
7575+ // let year = year.unwrap_or(chrono::Utc::now().year());
7676+ let data_file_path = PathBuf::new()
7777+ .join("data")
7878+ .join(format!("{}/day{}.txt", day.year, day.day));
7279 let data_file = File::open(&data_file_path)
7380 .unwrap_or_else(|_| panic!("could not open data file {:?}", data_file_path.as_path()));
7481 let buf_reader = BufReader::new(data_file);
···11mod day1;
22+mod day10;
33+mod day11;
44+mod day12;
25mod day2;
66+mod day22;
37mod day3;
48mod day4;
59mod day5;
···711mod day7;
812mod day8;
913mod day9;
1010-mod day10;
1111-mod day11;
1212-mod day12;
1313-mod day22;
1414pub(crate) use day1::*;
1515+pub(crate) use day10::*;
1616+pub(crate) use day11::*;
1717+pub(crate) use day12::*;
1518pub(crate) use day2::*;
1919+pub(crate) use day22::*;
1620pub(crate) use day3::*;
1721pub(crate) use day4::*;
1822pub(crate) use day5::*;
···2024pub(crate) use day7::*;
2125pub(crate) use day8::*;
2226pub(crate) use day9::*;
2323-pub(crate) use day10::*;
2424-pub(crate) use day11::*;
2525-pub(crate) use day12::*;
2626-pub(crate) use day22::*;