Menu
Coddy logo textTech

在庫確認

CoddyのKotlinジャーニー「ロジックとフロー」セクションの一部。レッスン 57/63。

challenge icon

チャレンジ

難しい

パラメーター runInventory と commands: List<String> を使って runInventory を完成させてください。関数を呼び出すたびに空の状態から始まる在庫を構築します。各コマンドは、フィールドが | で区切られた1つの文字列です。商品名は小文字のASCII単語です。コマンドは最大100個です。各コマンドをリテラルの区切り文字で分割してください。コマンドには、その操作に必要な正しい数のフィールドが常に含まれています。コマンドごとに1つの応答を返してください。数量は解析前に空白を取り除きます。有効な数量は0以上1000以下です。無効な数値テキスト、Int の範囲外のテキスト、負の数量、または1000を超える数量の場合は、状態を変更せずに invalid を返します。以前の手順で記述した内容をすべて保持し、それまでのすべてのコマンドと応答を含めてください。ADD|item|quantity をサポートしてください。有効な数量を、その商品の最初は0である在庫に加算し、added を返します。0を加算した場合も、その商品を作成します。GET|item を追加してください。その商品の数量を文字列として返し、商品が存在しない場合は 0 を返します。この手順でサポートされている操作のみが入力に使用されます。

上記でより厳しい上限が指定されていない限り、各階層のコレクションの要素数は最大100であり、整数引数および整数コレクション値は -1000 以上1000 以下です。解析対象として渡されるテキストには、説明されているように無効な表現や範囲外の表現が含まれる場合があります。

型 List<String> の値を返してください。提供された入力・出力コードはそのまま使用してください。スカラー引数は1行に1つずつ読み取ります。リストは要素数に続いて各要素が並び、マップはエントリ数に続いて各キーと値が並びます。ネストされたリストでは、各行について要素数と要素の形式を繰り返します。提供された main は、戻り値の後に改行を1つ出力します。リストにはKotlin標準の角括弧形式を使用し、追加のラベルは出力しないでください。

自分で試してみよう

fun runInventory(commands: List<String>): List<String> {
    val stock = mutableMapOf<String, Int>()
    val replies = mutableListOf<String>()
    for (command in commands) {
        val parts = command.split("|")
        val operation = parts[0]
        val item = if (parts.size > 1) parts[1] else ""
        when (operation) {
            "ADD" -> {
                val amount = parts[2].trim().toIntOrNull()
                if (amount == null || amount !in 0..1000) replies.add("invalid")
                else {
                    stock[item] = (stock[item] ?: 0) + amount
                    replies.add("added")
                }
            }
        }
    }
    return replies
}
fun main() {
    val commandsCount = readln().toInt()
    val commands = mutableListOf<String>()
    for (i0 in 0 until commandsCount) {
        val commandsItem = readLine().orEmpty()
        commands.add(commandsItem)
    }
    println(runInventory(commands))
}

ロジックとフローのすべてのレッスン

自分で練習してみよう: Kotlinプレイグラウンド