Menu
CoddyTech

Cek Stok

Termasuk bagian Logika & Alur dalam perjalanan Kotlin di Coddy. Pelajaran 57 dari 63.

challenge icon

Tantangan

Sulit

Lengkapi runInventory dengan parameter commands: List<String>. Buat inventaris yang dimulai dalam keadaan kosong pada setiap pemanggilan fungsi. Setiap perintah berupa satu string dengan bagian-bagian yang dipisahkan oleh |. Nama item adalah kata ASCII huruf kecil. Jumlah perintah paling banyak 100. Pisahkan setiap perintah menggunakan pemisah literal; jumlah bagian untuk setiap operasi selalu benar. Kembalikan satu balasan untuk setiap perintah. Kuantitas dihapus spasi di awal dan akhirnya sebelum diuraikan; jumlah yang valid berada antara 0 dan 1000. Teks angka yang tidak valid, teks angka di luar rentang Int, jumlah negatif, atau jumlah di atas 1000 menghasilkan invalid tanpa mengubah keadaan. Pertahankan semua yang kamu tulis pada langkah sebelumnya, termasuk setiap perintah dan balasan sebelumnya. Dukung ADD|item|quantity: tambahkan jumlah yang valid ke stok item tersebut, yang awalnya nol, lalu berikan balasan added. Menambahkan nol tetap membuat item tersebut. Tambahkan GET|item: berikan balasan berupa kuantitasnya sebagai string, atau 0 jika item tersebut tidak ada. Input hanya menggunakan operasi yang didukung pada langkah ini.

Kecuali jika batas yang lebih ketat disebutkan di atas, koleksi berisi paling banyak 100 elemen pada setiap tingkat, dan argumen integer serta nilai integer dalam koleksi berada antara -1000 dan 1000. Teks yang diberikan untuk penguraian dapat mencakup representasi yang tidak valid atau di luar rentang, seperti yang dijelaskan.

Kembalikan nilai bertipe List<String>. Pertahankan kode input/output yang disediakan. Kode tersebut membaca argumen skalar satu per baris; sebuah list dimulai dengan jumlah elemennya, lalu diikuti elemen-elemennya, dan sebuah map dimulai dengan jumlah entrinya, lalu diikuti setiap key dan value. List bersarang mengulangi format jumlah-dan-elemen untuk setiap baris. main yang disediakan mencetak nilai hasil, lalu satu baris baru. List menggunakan format standar Kotlin dengan tanda kurung siku; jangan mencetak label tambahan.

Coba sendiri

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

Semua pelajaran di Logika & Alur

Latihan sendiri: Playground Kotlin