Gère les paramètres d'usine des robots.
Quand un robot sort de l'usine, il n'a pas de nom.
La première fois qu'on allume un robot, un nom aléatoire lui est attribué, au format de deux lettres majuscules suivies de trois chiffres, comme RX837 ou BC811.
De temps en temps, il faut réinitialiser un robot à ses paramètres d'usine, ce qui efface son nom. La prochaine fois que tu lui demandes son nom, ce robot te répondra avec un nouveau nom aléatoire.
Les noms doivent être aléatoires : ils ne doivent pas suivre une séquence prévisible. Utiliser des noms aléatoires comporte un risque de collisions. Ta solution doit garantir que chaque robot existant possède un nom unique.
Par défaut, la suite de tests ne génère qu'environ 100 noms. Or il existe environ 700 000 noms valides, ce qui ne laisse qu'une faible probabilité de collisions. Pense à tester ta solution autrement pour détecter les collisions, en plus de la suite de tests.
Cet exercice poursuit notre exploration du système de types de Julia, cette fois avec des types mutables, et nous fait découvrir la génération de nombres aléatoires.
Imaginons que réinitialiser le robot aux réglages d'usine s'apparente à une opération chirurgicale : cela modifie le sujet, mais ne le remplace pas. On aurait aussi pu modéliser le problème de telle sorte que réinitialiser un robot crée un nouveau robot, mais on ne peut pas modéliser tous les problèmes uniquement à l'aide de structures de données immuables (même les langages purement fonctionnels gèrent la mutabilité au sein de leur environnement d'exécution !).
En Julia, par convention, les fonctions qui modifient leurs arguments portent le suffixe !.
Notre méthode pour effectuer cette opération s'appellera donc reset!.
Ce n'est qu'une convention, mais presque tout le code Julia publié la suit, et tu finiras peut-être par convenir qu'elle est bien utile !
Tu devras définir une méthode pour générer des noms uniques, une structure pour décrire les robots, une méthode pour réinitialiser un robot, et une méthode pour récupérer le nom d'un robot.
Tu trouveras peut-être utile de concevoir d'abord ton programme pour qu'il se contente d'émettre un nom aléatoire pour un robot (sans te soucier des collisions), puis de réfléchir ensuite à un schéma qui évitera d'émettre un jour des noms en double. Dans ta conception, réfléchis à la façon dont le temps d'exécution de la génération de noms évolue à mesure que les noms se raréfient. Quelles garanties veux-tu offrir à l'appelant ?
Inscris-toi sur Exercism pour apprendre et maîtriser Julia avec 35 concepts128 exercices, et un vrai mentorat humain, le tout gratuitement.