Tous les défis
Facile 0 résolus 0 % de réussite

Une configuration partagée

Simuler un objet de paramètres de type singleton : chaque partie du programme lit et écrit la même instance.

Ce que vous allez apprendre

  • Partager un seul objet dans tout le programme
  • Créer l'instance à la première utilisation
  • Lire et modifier les réglages à un seul endroit

Problème

Le modèle singleton garantit qu'une classe n'a exactement qu'une seule instance partagée par tout le monde, un choix courant pour les paramètres d'une application.

Simulez une configuration partagée unique qui commence vide. Traitez les opérations dans l'ordre :

  • set <key> <value> : stocke la valeur pour la clé (en remplaçant toute ancienne valeur).
  • get <key> : lit la valeur actuelle de la clé, ou missing si elle n'a jamais été définie.

Comme chaque appelant utilise la même instance, une valeur définie par une opération est visible par tout get ultérieur.

Implémentez shared_configuration(operations).

Entrée

operations: Chaînes sous les deux formes ci-dessus. Les clés et les valeurs ne contiennent pas d'espaces.

Sortie

Retournez les résultats des opérations get, dans l'ordre.

Contraintes

1 ≤ nombre d'opérations ≤ 10,000

Les clés et valeurs ont de 1 à 20 caractères

Exemples

Exemple 1
Entrée :
operations = ["set theme dark", "get theme", "get language"]

Sortie attendue :
expected = ["dark", "missing"]
Entrée :
std::vector<std::string> operations = {"set theme dark", "get theme", "get language"};

Sortie attendue :
std::vector<std::string> expected = {"dark", "missing"};
Entrée :
string[] operations = new string[] {"set theme dark", "get theme", "get language"};

Sortie attendue :
string[] expected = new string[] {"dark", "missing"};

Explication

theme a été défini sur dark ; language n'a jamais été défini, donc il est missing : ["dark", "missing"].

Exemple 2
Entrée :
operations = ["set lang en", "set lang vi", "get lang"]

Sortie attendue :
expected = ["vi"]
Entrée :
std::vector<std::string> operations = {"set lang en", "set lang vi", "get lang"};

Sortie attendue :
std::vector<std::string> expected = {"vi"};
Entrée :
string[] operations = new string[] {"set lang en", "set lang vi", "get lang"};

Sortie attendue :
string[] expected = new string[] {"vi"};

Explication

Le deuxième set remplace la première valeur dans la même instance partagée : ["vi"].

Comment l'aborder

Essayez d'abord seul, puis ouvrez les indices un par un.

Indice 1

Toutes les opérations lisent et écrivent le même objet unique.

Indice 2

Un dictionnaire de clé à valeur suffit pour stocker les réglages.

Indice 3

Une clé jamais définie doit renvoyer le texte missing.

Complexité attendue

temps O(nombre d'opérations), espace supplémentaire O(nombre de clés)

Références

Ce défi a été adapté pour CodeUtility. Suivez l'énoncé et les contraintes ci-dessus.

Apprenez des autres

Solutions de la communauté

Aucune solution publiée pour l'instant. Résolvez ce défi pour partager la première.