summaryrefslogtreecommitdiff
path: root/src/bin/day1.rs
blob: 478449658d8a483ff69039d8b765cdf5b3d55647 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
static DAY: u8 = 1;

fn main() {
    let input = advent::read_lines(DAY);
    println!("{DAY}a: {}", sum_digits(&input));
    println!("{DAY}b: {}", 0);
}

fn sum_digits(input: &[String]) -> u32 {
    let mut sum = 0;
    for line in input {
        let left_pos = line.find(|c: char| c.is_digit(10)).expect("line contains digit");
        let right_pos = line.rfind(|c: char| c.is_digit(10)).expect("line contains digit");

        let line = line.as_bytes();
        let left_digit = (line[left_pos] as char).to_digit(10).unwrap();
        let right_digit = (line[right_pos] as char).to_digit(10).unwrap();
        sum += (left_digit * 10 + right_digit) as u32;
    }
    sum
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test() {
        let input = [
            "1abc2",
            "pqr3stu8vwx",
            "a1b2c3d4e5f",
            "treb7uchet",
        ].iter().map(|&x| String::from(x)).collect::<Vec<_>>();
        assert_eq!(sum_digits(&input), 142);
    }
}