Les collections

Ces exercices portent sur Vec, String et les slices (&[T], &str). Faites-les dans l'ordre.

Renverser les mots

Renverser l'ordre des mots d'une phrase : "le chat dort" -> "dort chat le". Les mots sont séparés par des espaces simples.

  • Objectif : split_whitespace, rev, collect::<Vec<_>>(), join(" ").
  • Signature suggérée : fn renverser_mots(s: &str) -> String.
  • Cas de test : renverser_mots("le chat dort") -> "dort chat le", renverser_mots("bonjour") -> "bonjour".

Histogramme de lettres

Compter les occurrences de chaque lettre minuscule ASCII (a-z) dans une chaîne. Les autres caractères sont ignorés.

  • Objectif : chars, indexation d'un [u32; 26] via c as usize - 'a' as usize.
  • Signature suggérée : fn compter_lettres(s: &str) -> [u32; 26].
  • Cas de test : pour "abbccc", l'indice 0 (a) vaut 1, l'indice 1 (b) vaut 2, l'indice 2 (c) vaut 3 ; pour "Rust!", u, s, t valent 1 et le reste 0 (le R majuscule et le ! sont ignorés).

Fusion de deux vecteurs triés

À partir de deux slices déjà triés par ordre croissant, produire un Vec trié contenant tous leurs éléments.

  • Objectif : deux indices qui avancent en parallèle, Vec::push.
  • Signature suggérée : fn fusion(a: &[i32], b: &[i32]) -> Vec<i32>.
  • Cas de test : fusion(&[1, 3, 5], &[2, 4, 6]) -> [1, 2, 3, 4, 5, 6], fusion(&[], &[1, 2]) -> [1, 2], fusion(&[1, 1], &[1]) -> [1, 1, 1].

Palindrome

Dire si une chaîne se lit pareil dans les deux sens. Raisonne sur les caractères (chars), pas sur les octets, et ignore la casse.

  • Objectif : chars, rev, comparaison ; piège de l'indexation d'une String.
  • Signature suggérée : fn est_palindrome(s: &str) -> bool.
  • Cas de test : est_palindrome("kayak") -> true, est_palindrome("Été") -> true, est_palindrome("rust") -> false.

Sans doublons

Renvoyer les éléments d'un slice sans doublons, en préservant l'ordre de première apparition.

  • Objectif : Vec, contains, push.
  • Signature suggérée : fn sans_doublons(v: &[i32]) -> Vec<i32>.
  • Cas de test : sans_doublons(&[1, 2, 1, 3, 2, 4]) -> [1, 2, 3, 4], sans_doublons(&[]) -> [].