Identification des duplicats

Nous cherchons à identifier des comptes utilisateur partageant le même mot de passe. En effet, cela peut être un signe qui permet d'identifier deux comptes utilisateurs appartenant à la même personne physique.

Pour cela, nous allons construire une HashMap pour associer à un mot de passe les logins des comptes qui l'utilisent. Nous voulons construire une fonction group() dans le module account qui groupe les Account par mot de passe :

fn group(accounts: Vec<Account>) -> HashMap<String, Vec<String>> {
  todo!()
}
  1. Implémentez la fonction account::group(). On regardera avec intérêt la méthode HashMap::entry() et les méthodes or_insert() ou or_insert_with() applicables sur ce type Entry.
  2. Affichez le résultat de cette fonction appliquée sur les comptes définis sur la ligne de commande depuis main().
$ cargo run -- johndoe:abcde janedoe:1234 admin:abcde
{
    "abcde": [
        "johndoe",
        "admin",
    ],
    "1234": [
        "janedoe",
    ],
}
  1. En utilisant la méthode retain() de HashMap, ne conservez que les entrées correspondant à plusieurs comptes et n'affichez que ceux-ci.
$ cargo run -- johndoe:abcde janedoe:1234 admin:abcde
{
    "abcde": [
        "johndoe",
        "admin",
    ],
}
  1. Améliorez l'affichage en affichant une ligne par mot de passe partagé. Pour grouper les logins, vous pourrez utiliser la méthode Vec::join().
$ cargo run -- johndoe:abcde janedoe:1234 admin:abcde anonymous:1234
Password 1234 used by janedoe, anonymous
Password abcde used by johndoe, admin