課題について
この課題は、01 Foundationで学んだ知識を組み合わせて解く総合問題です。これまでの通常演習より難しく作られています。焦らず、問題を手順に分解してから実装に取りかかりましょう。
使うことになる知識の例:
- 構造体(
struct)とメソッド(第11章) enumとmatch(第12章)Vecと繰り返し処理(第10章)- 関数と借用(第7章・第9章)
- 文字列の所有権(第8章)
問題
ある店の在庫管理プログラムを作成してください。
商品は「名前」と「数量」を持ちます。数量に応じて、商品の在庫レベルを次の3段階に分類してください。
- 数量が10未満:
少ない - 数量が10以上50未満:
普通 - 数量が50以上:
多い
標準入力から商品の件数nと、続けてn件の商品情報(名前と数量)を受け取り、以下を出力してください。
- 各商品について、
名前: 在庫レベルの形式で、入力された順番にすべて出力する - 最後に、すべての商品の数量の合計を
合計: 値の形式で出力する - さらに、数量が最も多い商品の名前を
最多: 名前の形式で出力する(数量が同じ商品が複数ある場合は、先に入力された方を採用する)
入力形式
n
name_1 quantity_1
name_2 quantity_2
...
name_n quantity_n
name_iは空白を含まない商品名(英数字)です。quantity_iは0以上の整数です。
出力形式
1行目からn行目に、各商品の名前: 在庫レベルを入力順に出力してください。
続けて、合計: 値の行、最多: 名前の行をこの順に出力してください。
サンプル
入力:
3
apple 5
banana 25
cherry 60
出力:
apple: 少ない
banana: 普通
cherry: 多い
合計: 90
最多: cherry
設計のヒント
設計の方針を見る
- 商品を表す構造体(例:
name: String,quantity: u32)を定義する。 - 在庫レベルを表す
enum(例:Low,Medium,High)を定義し、数量から在庫レベルを判定する関数(または構造体のメソッド)を作る。 enumの値を日本語の文字列(少ない/普通/多い)に変換する処理を、matchを使って書く。- 商品の一覧は
Vec<商品の構造体>として保持する。 - 合計と最多の商品は、
Vecを借用して走査する関数としてそれぞれ実装すると、所有権の移動を気にせず複数回処理できる。
コード提出フォーム
RUST安全なサーバー側採点連携が未接続のため、現在は提出できません。
採点基盤準備中
公開テストケース
読み込み中…