Les itérateurs
Ces exercices portent sur iter / into_iter, map, filter, fold, zip,
les consommateurs (sum, min, max, count...) et l'évaluation paresseuse.
Faites-les dans l'ordre. Essayez de n'utiliser aucune boucle for.
Somme des carrés pairs
Calculer la somme des carrés des entiers pairs de 1 à n inclus, avec une chaîne
d'itérateurs.
- Objectif :
(1..=n),filter,map,sum. - Signature suggérée :
fn somme_carres_pairs(n: u32) -> u32. - Cas de test :
somme_carres_pairs(10)->220(4 + 16 + 36 + 64 + 100),somme_carres_pairs(1)->0.
Produit scalaire
Calculer le produit scalaire de deux slices de même longueur.
- Objectif :
zip,map,sum. - Signature suggérée :
fn produit_scalaire(a: &[i64], b: &[i64]) -> i64. - Cas de test :
produit_scalaire(&[1, 2, 3], &[4, 5, 6])->32,produit_scalaire(&[], &[])->0.
Mot le plus long
Renvoyer le mot le plus long d'une phrase. En cas d'égalité, le premier.
- Objectif :
split_whitespace,foldOption. - Signature suggérée :
fn plus_long(phrase: &str) -> Option<&str>. - Cas de test :
plus_long("le chat dort tranquillement")->Some("tranquillement"),plus_long("")->None,plus_long("a bb cc")->Some("bb").
Réimplémenter count
Écrire une fonction qui compte les éléments d'un itérateur en utilisant
uniquement fold (pas .count()).
- Objectif :
fold, accumulateur. - Signature suggérée :
fn compte<I: Iterator>(it: I) -> usize. - Cas de test :
compte(0..10)->10,compte(vec![1, 2, 3].into_iter())->3,compte(std::iter::empty::<i32>())->0.
Moyennes mobiles (fenêtre de 2)
À partir d'un slice de f64, renvoyer le vecteur des moyennes de chaque paire
d'éléments consécutifs.
- Objectif :
slice::windows(2),map. - Signature suggérée :
fn moyennes_paires(v: &[f64]) -> Vec<f64>. - Cas de test :
moyennes_paires(&[1.0, 3.0, 5.0])->[2.0, 4.0],moyennes_paires(&[10.0])->[].