#![allow(dead_code)] #![allow(unused_variables)] #![allow(unused_mut)] use std::fs::File; use std::io::Read; fn main() { let filename = "in/day01.ref"; // let filename = "in/day01.pzl"; let mut f = File::open(filename).expect("cannot open file"); let mut content = String::new(); f.read_to_string(&mut content).expect("cannot read file"); let lines: Vec<_> = content.trim_end().split('\n').collect(); // println!("{:?}", lines); let mut res1 = 0; for line in &lines { let nums: Vec<_> = line.chars().filter_map(|a| a.to_digit(10)).collect(); if nums.len() == 1 { res1 += nums[0] * 10 + nums[0]; } else { res1 += nums[0] * 10 + nums[nums.len() - 1]; } } let mut res2 = 0; let digits = [ "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", ]; for line in &lines { let b: Vec = line.chars().collect(); let mut nums: Vec = Vec::new(); for i in 0..b.len() { match b[i].to_digit(10) { Some(i) => nums.push(i), None => (), } for (j, digit) in digits.iter().enumerate() { let d: Vec = digit.chars().collect(); if d.iter().zip(b[i..].iter()).filter(|&(a, b)| a == b).count() == d.len() { nums.push(j as u32); } } } if nums.len() == 0 { res2 += nums[0] * 10 + nums[0]; } else { res2 += nums[0] * 10 + nums[nums.len() - 1]; } } println!("res1: {}", res1); println!("res2: {}", res2); }