コーディングテスト-リソース機能実装問題
あなたはソーシャルゲーム会社の社員であり, クエストについての機能を担当することになりました. 以下, ゲーム内で得たり, 消費できたりするアイテムやゲーム内通貨のことを リソース と呼びます.
リソースの種類は ゲーム内通貨, アイテム の2種類があり, ユーザーは各リソースを保持しています. ユーザーデータをJSONデータとして表すと以下のようになります.
ユーザーデータ
{
"userId":"user",
"resources":{
"money":{
"type":"money",
"value":400
},
"itemstacks":{
"type":"itemstacks",
"items":{
"item001":4,
"item002":6
}
}
}
}ゲーム内通貨は識別用のプロパティ(type) と値からなり,
アイテムはアイテムIDと個数のハッシュマップとなっていて(itemstacks)
具体的には以下のようなJSONデータとして表されます.
ゲーム内通貨
{
"type":"money",
"value":200
}アイテム
{
"type":"itemstacks",
"items":{
"item001":2,
"item002":1
}
}クエスト
クエストには
- クエストを開始する際にかかるコスト(
costs) - クエストをクリアした際の報酬(
rewards)
がリソースの配列として定義されています.
ユーザーはクエスト開始前にコストを支払い, クエストをクリアしユーザーが報酬を得ると各リソースについて報酬分のリソースが加算されます.
また, ゲームにはキャンペーンがあり特定期間中はクエストの全ての報酬が2倍になることがあります.
{
"questId":"quest001",
"costs":[
{
"type":"money",
"value":100
}
],
"rewards":[
{
"type":"money",
"value":200
},
{
"type":"itemstacks",
"items":{
"item001":2,
"item002":1
}
}
]
}あなたは,
- [チェック機能] クエスト開始の際, ユーザーがコストを支払えるかどうかのチェック
- [消費機能] クエスト開始の際のユーザーがリソースを消費する機能
- [報酬機能] クエストクリアの際のユーザーがリソースを得る機能
- [増量機能] クエストの報酬をn倍にする機能
の実装をしてください. 実行性能は気にしなくてよく, 任意のプログラミング言語を使って構いません. またJSONのデコード等問題に関係ない部分は実装しなくて結構です.
備考
- 今後, リソースの種類は増える可能性があります.
- リソースの配列は同じ種類がまとまっているとは限りません.