すべてのチャレンジ
簡単 0件解決済み 正答率0%

共有された 1 つの設定

シングルトンの設定オブジェクトをシミュレートする: プログラムのどの部分も同じインスタンスを読み書きする。

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

  • プログラム全体で 1 つのオブジェクトを共有する
  • 最初に使うときにインスタンスを作る
  • 設定を 1 か所から読み書きする

問題

原文(英語)を表示

singleton パターンは、クラスにちょうど 1 つのインスタンスだけを持たせ、誰もがそれを共有することを保証します。これはアプリケーション設定でよく使われます。

空の状態で始まる共有設定を 1 つシミュレートしてください。操作を順番に処理します。

  • set <key> <value>: キーに値を保存する(古い値があれば置き換える)。
  • get <key>: キーの現在の値を読み取る。未設定なら missing を返す。

すべての呼び出し元が同じインスタンスを使うため、ある操作で設定された値は、その後のすべての get から見えます。

shared_configuration(operations) を実装してください。

Input

operations: 上の 2 つの形式の文字列。キーと値にはスペースを含みません。

Output

get 操作の結果を、順番どおりに返してください。

制約

1 ≤ 操作の数 ≤ 10,000

キーと値は 1〜20 文字

例

例 1
入力:
operations = ["set theme dark", "get theme", "get language"]

期待される出力:
expected = ["dark", "missing"]
入力:
std::vector<std::string> operations = {"set theme dark", "get theme", "get language"};

期待される出力:
std::vector<std::string> expected = {"dark", "missing"};
入力:
string[] operations = new string[] {"set theme dark", "get theme", "get language"};

期待される出力:
string[] expected = new string[] {"dark", "missing"};

解説

theme は dark に設定され、language は設定されていないので missing です: ["dark", "missing"].

例 2
入力:
operations = ["set lang en", "set lang vi", "get lang"]

期待される出力:
expected = ["vi"]
入力:
std::vector<std::string> operations = {"set lang en", "set lang vi", "get lang"};

期待される出力:
std::vector<std::string> expected = {"vi"};
入力:
string[] operations = new string[] {"set lang en", "set lang vi", "get lang"};

期待される出力:
string[] expected = new string[] {"vi"};

解説

2 回目の set は、同じ共有インスタンス内の最初の値を置き換えます: ["vi"].

解き方のヒント

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

ヒント 1

すべての操作が同じ 1 つのオブジェクトを読み書きします。

ヒント 2

設定はキーから値への辞書で十分です。

ヒント 3

一度も設定されていないキーは missing を返します。

目安の計算量

時間 O(操作の数)、追加メモリ O(キーの数)

参考資料

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

他の人の解答から学ぶ

コミュニティの解答

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