("nine", 9),
]);
- // on cherche soit le premier digit soit le premier chiffre en toute lettre
- // par la gauche (left search)
- // par la droite (right search)
- //
- // on peut lister les index de chaque digit
- // stocker (index, valeur)
- //
- // faire de même pour chaque chiffre trouvé dans la chaîne
- //
let mut res = 0;
for l in input.lines() {
+
+ // on cherche soit le premier digit soit le premier chiffre en toute lettre
+ // par la gauche (left search)
+ // par la droite (right search)
+ //
+ // on peut lister les index de chaque digit
+ // stocker (index, valeur)
let mut digits: Vec<(usize, u32)> = l.chars()
.enumerate()
.filter(|(_, c)| c.is_digit(10))
.map(|(i, c)| (i, c.to_digit(10).unwrap()))
.collect();
- //println!("digits: {:?}", digits);
+ // faire de même pour chaque chiffre trouvé dans la chaîne
+ // stocker sous forme (index, valeur)
let mut numbers: Vec<(usize, u32)> = Vec::new();
-
for (key, val) in map.iter() {
let mut matches: Vec<(usize, u32)> = l.match_indices(key)
.map(|(i, _)| (i, *val))
numbers.append(&mut matches);
}
numbers.sort_by(|(i, _), (j, _)| i.cmp(j));
- //println!("numbers: {:?}", numbers);
// on concatene les 2 vecteurs
// chaque index est unique dans chaque vecteur et entre les vecteurs
// l'index d'un digit ne peut pas être l'index d'un chiffre en lettre
// (et inversement)
-
digits.append(&mut numbers);
digits.sort_by(|(i, _), (j, _)| i.cmp(j));
- //println!("digits sorted: {:?}", digits);
- //println!("found: {}{}", digits[0].1, digits[digits.len() - 1].1);
res += 10 * digits[0].1 + digits[digits.len() - 1].1;
}