Menu
Coddy logo textTech

アイテムの販売

CoddyのRustジャーニー「Logic & Flow」セクションの一部 — レッスン 52/66。

challenge icon

チャレンジ

簡単

5つの入力を受け取ります。最初の入力は販売するアイテム名です。2番目の入力は販売する数量です。3番目の入力は、在庫にあるアイテム名のカンマ区切りリストです。4番目の入力は、各アイテムに対応する価格のカンマ区切りリストです。5番目の入力は、各アイテムに対応する数量のカンマ区切りリストです。アイテム名をキーとし、価格と数量を含むタプル (f64, i32) を値とする在庫データを格納するための HashMap を構築してください。その後、要求された数量のアイテムの販売を試みてください。

要件:

  • std::collections から HashMap をインポートする
  • 最初の入力(販売するアイテム名)を読み込み、空白をトリミングする
  • 2番目の入力(販売する数量)を読み込み、空白をトリミングする
  • 販売する数量を i32 にパースする
  • 3番目の入力(カンマ区切りのアイテム名)を読み込み、空白をトリミングする
  • 4番目の入力(カンマ区切りの価格)を読み込み、空白をトリミングする
  • 5番目の入力(カンマ区切りの数量)を読み込み、空白をトリミングする
  • 在庫用にミュータブルな HashMap<String, (f64, i32)> を作成する
  • アイテム名をカンマで分割する
  • 価格をカンマで分割し、それぞれを f64 にパースする
  • 数量をカンマで分割し、それぞれを i32 にパースする
  • 各アイテムを、対応する価格と数量のタプルと共に在庫に挿入する
  • .get() を使用して、要求されたアイテムが在庫に存在するか確認する
  • match 式を使用して、.get() から返された Option を処理する
  • Some アームの場合:
    • タプルから価格と現在の数量を取り出す
    • 現在の数量が販売する数量以上であるか確認する
    • はいの場合:
      • 現在の数量から販売する数量を引いて、新しい数量を計算する
      • アイテムの価格に販売する数量を掛けて、合計金額を計算する
      • .insert() を使用して、新しい数量で在庫を更新する
      • 次のように出力する: Sold [quantity_to_sell] [item_name]
      • 次のように出力する: Total: $[total_price]
      • 次のように出力する: Remaining stock: [new_quantity]
    • いいえ(在庫不足)の場合:
      • 次のように出力する: Insufficient stock for [item_name]
      • 次のように出力する: Available: [current_quantity]
  • None アームの場合、次のように出力する: [item_name] is not in stock

入力:

  • 1行目: 販売するアイテム名 (例: Mouse)
  • 2行目: 販売する数量 (例: 10)
  • 3行目: カンマ区切りのアイテム名 (例: Laptop,Mouse,Keyboard)
  • 4行目: カンマ区切りの価格 (例: 999.99,25.50,75.00)
  • 5行目: カンマ区切りの数量 (例: 15,50,30)

出力:

  • アイテムが存在し、十分な在庫がある場合:
    • 1行目: Sold [quantity_to_sell] [item_name]
    • 2行目: Total: $[total_price]
    • 3行目: Remaining stock: [new_quantity]
  • アイテムは存在するが、在庫が不足している場合:
    • 1行目: Insufficient stock for [item_name]
    • 2行目: Available: [current_quantity]
  • アイテムが存在しない場合: [item_name] is not in stock

自分で試してみよう

use std::collections::HashMap;
use std::io;

fn main() {
    // 入力を読み込む
    let mut item_to_sell = String::new();
    io::stdin().read_line(&mut item_to_sell).expect("Failed to read line");
    let item_to_sell = item_to_sell.trim();
    
    let mut quantity_to_sell_input = String::new();
    io::stdin().read_line(&mut quantity_to_sell_input).expect("Failed to read line");
    let quantity_to_sell: i32 = quantity_to_sell_input.trim().parse().expect("Invalid number");
    
    let mut item_names_input = String::new();
    io::stdin().read_line(&mut item_names_input).expect("Failed to read line");
    let item_names_input = item_names_input.trim();
    
    let mut prices_input = String::new();
    io::stdin().read_line(&mut prices_input).expect("Failed to read line");
    let prices_input = prices_input.trim();
    
    let mut quantities_input = String::new();
    io::stdin().read_line(&mut quantities_input).expect("Failed to read line");
    let quantities_input = quantities_input.trim();
    
    // TODO: 以下にコードを記述してください
    // 在庫を保存するためのHashMapを作成する
    // 入力を処理して在庫を構築する
    // アイテムが存在するか確認し、販売を処理する
    
}

Logic & Flowのすべてのレッスン