Menu
CoddyTech

Kiểm tra hàng tồn kho

Thuộc phần Logic và luồng chương trình trong hành trình Kotlin của Coddy. Bài học 57 trên 63.

challenge icon

Thử thách

Khó

Hoàn thiện runInventory với tham số commands: List<String>. Tạo một kho hàng bắt đầu trống cho mỗi lần gọi hàm. Mỗi lệnh là một chuỗi có các trường được phân tách bằng |. Tên mặt hàng là các từ ASCII viết thường. Có tối đa 100 lệnh. Tách mỗi lệnh theo dấu phân cách cố định; số trường của mỗi lệnh luôn chính xác với thao tác tương ứng. Trả về một câu trả lời cho mỗi lệnh. Cắt khoảng trắng ở hai đầu số lượng trước khi phân tích; số lượng hợp lệ nằm trong khoảng từ 0 đến 1000. Văn bản số không hợp lệ, văn bản nằm ngoài phạm vi của Int, số lượng âm hoặc số lượng lớn hơn 1000 sẽ tạo ra invalid mà không làm thay đổi trạng thái. Giữ lại mọi thứ bạn đã viết ở các bước trước, bao gồm từng lệnh và câu trả lời trước đó. Hỗ trợ ADD|item|quantity: cộng một số lượng hợp lệ vào tồn kho của mặt hàng đó, ban đầu là 0, rồi trả lời added. Thêm 0 vẫn tạo mặt hàng. Thêm GET|item: trả lời bằng số lượng của mặt hàng dưới dạng chuỗi, hoặc 0 nếu mặt hàng không tồn tại. Đầu vào chỉ sử dụng các thao tác được hỗ trợ ở bước này.

Trừ khi giới hạn chặt hơn được nêu ở trên, mỗi tập hợp chứa tối đa 100 phần tử ở mỗi cấp, còn đối số số nguyên và giá trị số nguyên trong tập hợp nằm trong khoảng từ -1000 đến 1000. Văn bản dùng để phân tích có thể chứa các biểu diễn không hợp lệ hoặc nằm ngoài phạm vi như đã mô tả.

Trả về một giá trị có kiểu List<String>. Giữ nguyên code đầu vào/đầu ra được cung cấp. Code này đọc từng đối số đơn trên một dòng; danh sách bắt đầu bằng số lượng phần tử, theo sau là các phần tử, còn từ điển bắt đầu bằng số lượng mục, theo sau là từng khóa và giá trị. Danh sách lồng nhau lặp lại định dạng số lượng phần tử và các phần tử cho mỗi hàng. main được cung cấp sẽ in giá trị trả về, theo sau là một ký tự xuống dòng. Danh sách sử dụng định dạng có dấu ngoặc vuông tiêu chuẩn của Kotlin; không in thêm nhãn.

Tự làm thử

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))
}

Tất cả bài học trong Logic và luồng chương trình

Tự luyện tập: Playground Kotlin