Tutte le sfide
Facile 0 risolte 0% di accettazione

Sommare un oggetto JSON piatto

Analizza un oggetto JSON piatto i cui valori sono interi e somma i valori.

Cosa imparerai

  • Leggere coppie chiave-valore da un testo JSON
  • Gestire spazi e numeri negativi
  • Sommare i valori in un intero a 64 bit

Problema

I programmi ricevono spesso JSON come {"apples": 3, "pears": 5}. Librerie come System.Text.Json lo analizzano per te, ma analizzare a mano un caso semplice mostra come funziona il formato.

L'input è un oggetto JSON piatto: {, poi zero o più coppie "key": value separate da virgole, poi }. Le chiavi sono tra virgolette e non contengono virgolette, virgole o due punti; i valori sono interi, possibilmente negativi. Gli spazi possono comparire attorno a qualsiasi simbolo.

Implementa sum_json_numbers(text).

Input

text: L'oggetto JSON.

Output

Restituisci la somma di tutti i valori (0 per un oggetto vuoto).

Vincoli

2 ≤ lunghezza del testo ≤ 100,000

Al massimo 10,000 coppie; ogni valore e la somma stanno in un intero a 64 bit

Esempi

Esempio 1
Input:
text = "{\"apples\": 3, \"pears\": 5}"

Output atteso:
expected = 8
Input:
std::string text = "{\"apples\": 3, \"pears\": 5}";

Output atteso:
long long expected = 8;
Input:
string text = "{\"apples\": 3, \"pears\": 5}";

Output atteso:
long expected = 8;

Spiegazione

3 + 5 = 8.

Esempio 2
Input:
text = "{ \"debt\" : -20 , \"cash\":15 }"

Output atteso:
expected = -5
Input:
std::string text = "{ \"debt\" : -20 , \"cash\":15 }";

Output atteso:
long long expected = -5;
Input:
string text = "{ \"debt\" : -20 , \"cash\":15 }";

Output atteso:
long expected = -5;

Spiegazione

Gli spazi attorno ai simboli non contano: −20 + 15 = −5.

Come affrontarlo

Prova prima da solo, poi apri un suggerimento alla volta.

Suggerimento 1

Togli le graffe, poi dividi le coppie alle virgole.

Suggerimento 2

Ogni valore è il testo dopo i due punti; togli gli spazi prima di convertire.

Suggerimento 3

Usa un intero a 64 bit e restituisci 0 per un oggetto vuoto.

Complessità attesa

tempo O(lunghezza del testo), spazio aggiuntivo O(1)

Riferimenti

Questa sfida è adattata per CodeUtility. Segui la traccia e i vincoli sopra.

Impara dagli altri

Soluzioni della community

Nessuna soluzione pubblicata. Risolvi questa sfida per condividere la prima.