]> aoc.elinar.fr Git - aoc_2023/commitdiff
Day01 - part 1
authoralex <null>
Fri, 1 Dec 2023 10:36:31 +0000 (11:36 +0100)
committeralex <null>
Sat, 2 Dec 2023 05:14:39 +0000 (06:14 +0100)
src/day01.rs [new file with mode: 0644]
src/main.rs

diff --git a/src/day01.rs b/src/day01.rs
new file mode 100644 (file)
index 0000000..861539d
--- /dev/null
@@ -0,0 +1,58 @@
+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());
+    }
+}
index 080d202c77b3a60fb9bfb34af2b633a96069d6f9..80ffb11375e4873ade51038802aca45ce2bd1440 100644 (file)
@@ -3,6 +3,7 @@ use std::process;
 use std::error::Error;
 
 pub mod day00;
+pub mod day01;
 
 fn main() {
     let args: Vec<String> = env::args().collect();
@@ -20,6 +21,7 @@ fn main() {
 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(())