--- /dev/null
+use std::io::Read;
+use std::error::Error;
+use std::fs::File;
+
+pub fn run() -> Result<(), Box<dyn Error>> {
+ let mut f = File::open("../input/day01.txt")?;
+ let mut input = String::new();
+ f.read_to_string(&mut input)?;
+
+ let res = run_part1(&input)?;
+ println!("{res}");
+
+ run_part2(&input)?;
+
+ Ok(())
+}
+
+fn run_part1(input: &str) -> Result<u32, Box<dyn Error>> {
+ println!("Running day01 - part 1");
+ let mut res = 0;
+ for l in input.lines() {
+ let digits: Vec<u32> = l.chars()
+ .filter(|c| c.is_digit(10))
+ .map(|c| c.to_digit(10).unwrap())
+ .collect();
+ res += 10 * digits[0] + digits[digits.len() - 1];
+ }
+ Ok(res)
+}
+
+fn run_part2(input: &str) -> Result<String, Box<dyn Error>> {
+ println!("Running day01 - part 2");
+ Ok(input.to_string())
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn day01_part1() {
+ let input = "\
+1abc2
+pqr3stu8vwx
+a1b2c3d4e5f
+treb7uchet";
+ let res = run_part1(&input);
+ assert_eq!(142, res.unwrap());
+ }
+
+ #[test]
+ fn day02_part2() {
+ let input = "\
+blabla";
+ let res = run_part2(&input);
+ assert_eq!("blabla", res.unwrap());
+ }
+}
use std::error::Error;
pub mod day00;
+pub mod day01;
fn main() {
let args: Vec<String> = env::args().collect();
fn run(day: String) -> Result<(), Box<dyn Error>> {
match day.as_ref() {
"day00" => day00::run()?,
+ "day01" => day01::run()?,
_ => return Err(format!("unknown day \"{day}\"").into()),
}
Ok(())