チャレンジ一覧に戻る
簡単 0件解決済み 正答率0%

フラットな JSON の数値を合計

整数を値に持つフラットな JSON オブジェクトを解析し、値の合計を求めます。

このチャレンジで学べること

  • JSON テキストからキーと値のペアを読む
  • 空白と負の数を扱う
  • 値を 64 ビット整数で合計する

問題

原文(英語)を表示

プログラムはしばしば {"apples": 3, "pears": 5} のような JSON を受け取ります。System.Text.Json のようなライブラリを使えば解析できますが、単純なケースを自分で解析すると、形式がどのようになっているかを理解できます。

入力はフラットな JSON オブジェクトです。{ のあとに、0 個以上の "key": value の組がカンマで区切られて続き、最後に } が来ます。キーは引用符で囲まれ、引用符、カンマ、コロンを含みません。値は整数で、負の数でもかまいません。記号の前後には空白が入ることがあります。

sum_json_numbers(text) を実装してください。

Input

text: JSON オブジェクト。

Output

すべての値の合計を返してください(空のオブジェクトなら 0)。

制約

2 ≤ テキストの長さ ≤ 100,000

ペアは最大 10,000 個。各値と合計は 64 ビット整数に収まる

例

例 1
入力:
text = "{\"apples\": 3, \"pears\": 5}"

期待される出力:
expected = 8
入力:
std::string text = "{\"apples\": 3, \"pears\": 5}";

期待される出力:
long long expected = 8;
入力:
string text = "{\"apples\": 3, \"pears\": 5}";

期待される出力:
long expected = 8;

解説

3 + 5 = 8.

例 2
入力:
text = "{ \"debt\" : -20 , \"cash\":15 }"

期待される出力:
expected = -5
入力:
std::string text = "{ \"debt\" : -20 , \"cash\":15 }";

期待される出力:
long long expected = -5;
入力:
string text = "{ \"debt\" : -20 , \"cash\":15 }";

期待される出力:
long expected = -5;

解説

記号の前後に空白があってもかまいません: −20 + 15 = −5.

解き方のヒント

まずは自分で考えてから、ヒントを 1 つずつ開いてみましょう。

ヒント 1

波かっこを取り除き、カンマでペアに分けます。

ヒント 2

値はコロンの後ろの部分です。変換の前に空白を取り除きます。

ヒント 3

64 ビット整数を使い、空のオブジェクトには 0 を返します。

目安の計算量

時間 O(テキストの長さ)、追加メモリ O(1)

参考資料

この課題はCodeUtility用に調整されています。上記の説明と制約に従ってください。

他の人の解答から学ぶ

コミュニティの解答

まだ公開された解答がありません。この課題を解いて最初の解答を共有しましょう。