← Rust

LESSON / EXERCISE

Foundation総合課題:在庫管理プログラム

構造体・enum・Vec・所有権と借用・match・基本アルゴリズムを組み合わせた総合課題です。

課題について

この課題は、01 Foundationで学んだ知識を組み合わせて解く総合問題です。これまでの通常演習より難しく作られています。焦らず、問題を手順に分解してから実装に取りかかりましょう。

使うことになる知識の例:

  • 構造体(struct)とメソッド(第11章)
  • enumとmatch(第12章)
  • Vecと繰り返し処理(第10章)
  • 関数と借用(第7章・第9章)
  • 文字列の所有権(第8章)

問題

ある店の在庫管理プログラムを作成してください。

商品は「名前」と「数量」を持ちます。数量に応じて、商品の在庫レベルを次の3段階に分類してください。

  • 数量が10未満:少ない
  • 数量が10以上50未満:普通
  • 数量が50以上:多い

標準入力から商品の件数nと、続けてn件の商品情報(名前と数量)を受け取り、以下を出力してください。

  1. 各商品について、名前: 在庫レベル の形式で、入力された順番にすべて出力する
  2. 最後に、すべての商品の数量の合計を 合計: 値 の形式で出力する
  3. さらに、数量が最も多い商品の名前を 最多: 名前 の形式で出力する(数量が同じ商品が複数ある場合は、先に入力された方を採用する)

入力形式

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

設計のヒント

設計の方針を見る
  1. 商品を表す構造体(例:name: String, quantity: u32)を定義する。
  2. 在庫レベルを表すenum(例:Low, Medium, High)を定義し、数量から在庫レベルを判定する関数(または構造体のメソッド)を作る。
  3. enumの値を日本語の文字列(少ない/普通/多い)に変換する処理を、matchを使って書く。
  4. 商品の一覧はVec<商品の構造体>として保持する。
  5. 合計と最多の商品は、Vecを借用して走査する関数としてそれぞれ実装すると、所有権の移動を気にせず複数回処理できる。

コード提出フォーム

RUST

安全なサーバー側採点連携が未接続のため、現在は提出できません。

採点基盤準備中

公開テストケース

読み込み中…