Voltar para os desafios
Fácil 0 resolvidos 0% de aceitação

Somar um objeto JSON plano

Analise um objeto JSON plano cujos valores são inteiros e some os valores.

O que você vai aprender

  • Ler pares chave-valor de um texto JSON
  • Tratar espaços e números negativos
  • Somar valores em um inteiro de 64 bits

Problema

Ver original (inglês)

Programas frequentemente recebem JSON como {"apples": 3, "pears": 5}. Bibliotecas como System.Text.Json fazem isso para você, mas analisar um caso simples na mão mostra como o formato funciona.

A entrada é um objeto JSON plano: {, depois zero ou mais pares "key": value separados por vírgulas, depois }. As chaves são entre aspas e não contêm aspas, vírgulas ou dois-pontos; os valores são inteiros, possivelmente negativos. Espaços podem aparecer ao redor de qualquer um dos símbolos.

Implemente sum_json_numbers(text).

Input

text: O objeto JSON.

Output

Retorne a soma de todos os valores (0 para um objeto vazio).

Restrições

2 ≤ comprimento do texto ≤ 100,000

No máximo 10,000 pares; cada valor e a soma cabem em um inteiro de 64 bits

Exemplos

Exemplo 1
Entrada:
text = "{\"apples\": 3, \"pears\": 5}"

Saída esperada:
expected = 8
Entrada:
std::string text = "{\"apples\": 3, \"pears\": 5}";

Saída esperada:
long long expected = 8;
Entrada:
string text = "{\"apples\": 3, \"pears\": 5}";

Saída esperada:
long expected = 8;

Explicação

3 + 5 = 8.

Exemplo 2
Entrada:
text = "{ \"debt\" : -20 , \"cash\":15 }"

Saída esperada:
expected = -5
Entrada:
std::string text = "{ \"debt\" : -20 , \"cash\":15 }";

Saída esperada:
long long expected = -5;
Entrada:
string text = "{ \"debt\" : -20 , \"cash\":15 }";

Saída esperada:
long expected = -5;

Explicação

Espaços em volta dos símbolos não importam: −20 + 15 = −5.

Como abordar

Tente sozinho primeiro e depois abra uma dica de cada vez.

Dica 1

Remova as chaves e separe os pares pelas vírgulas.

Dica 2

Cada valor é o texto depois dos dois-pontos; remova os espaços antes de converter.

Dica 3

Use um inteiro de 64 bits e retorne 0 para um objeto vazio.

Complexidade esperada

tempo O(comprimento do texto), espaço extra O(1)

Referências

Este desafio foi adaptado para o CodeUtility. Siga o enunciado e as restrições acima.

Aprenda com outros

Soluções da comunidade

Ainda não há soluções publicadas. Resolva este desafio para compartilhar a primeira.