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

Somme d'un objet JSON plat

Analysez un objet JSON plat dont les valeurs sont des entiers et additionnez les valeurs.

Ce que vous allez apprendre

  • Lire des paires clé-valeur dans un texte JSON
  • Gérer les espaces et les nombres négatifs
  • Additionner les valeurs dans un entier 64 bits

Problème

Les programmes reçoivent souvent du JSON comme {"apples": 3, "pears": 5}. Des bibliothèques comme System.Text.Json l’analysent pour vous, mais traiter un cas simple à la main montre comment le format fonctionne.

L’entrée est un objet JSON plat : {, puis zéro ou plusieurs paires "key": value séparées par des virgules, puis }. Les clés sont entre guillemets et ne contiennent ni guillemets, ni virgules, ni deux-points ; les valeurs sont des entiers, éventuellement négatifs. Des espaces peuvent apparaître autour de n’importe lequel des symboles.

Implémentez sum_json_numbers(text).

Input

text: L’objet JSON.

Output

Retournez la somme de toutes les valeurs (0 pour un objet vide).

Contraintes

2 ≤ longueur du texte ≤ 100,000

Au plus 10,000 paires ; chaque valeur et la somme tiennent dans un entier 64 bits

Exemples

Exemple 1
Entrée :
text = "{\"apples\": 3, \"pears\": 5}"

Sortie attendue :
expected = 8
Entrée :
std::string text = "{\"apples\": 3, \"pears\": 5}";

Sortie attendue :
long long expected = 8;
Entrée :
string text = "{\"apples\": 3, \"pears\": 5}";

Sortie attendue :
long expected = 8;

Explication

3 + 5 = 8.

Exemple 2
Entrée :
text = "{ \"debt\" : -20 , \"cash\":15 }"

Sortie attendue :
expected = -5
Entrée :
std::string text = "{ \"debt\" : -20 , \"cash\":15 }";

Sortie attendue :
long long expected = -5;
Entrée :
string text = "{ \"debt\" : -20 , \"cash\":15 }";

Sortie attendue :
long expected = -5;

Explication

Les espaces autour des symboles n’ont pas d’importance : −20 + 15 = −5.

Comment l'aborder

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

Indice 1

Retirez les accolades, puis coupez les paires aux virgules.

Indice 2

Chaque valeur est le texte après les deux-points ; retirez les espaces avant de convertir.

Indice 3

Utilisez un entier 64 bits et renvoyez 0 pour un objet vide.

Complexité attendue

temps O(longueur du texte), espace supplémentaire O(1)

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.