Jual Stok
Termasuk bagian Logika & Alur dalam perjalanan Kotlin di Coddy. Pelajaran 58 dari 63.
Tantangan
SulitLengkapi runInventory dengan parameter commands: List<String>. Buat inventaris yang dimulai dalam keadaan kosong untuk setiap pemanggilan fungsi. Setiap perintah berupa satu string dengan bidang yang dipisahkan oleh |. Nama item berupa kata ASCII huruf kecil. Jumlah perintah paling banyak 100. Pisahkan setiap perintah menggunakan pemisah literal; setiap perintah selalu memiliki jumlah bidang yang benar sesuai operasinya. Kembalikan satu balasan untuk setiap perintah. Kuantitas dipangkas sebelum diuraikan; jumlah yang valid adalah antara 0 dan 1000. Teks angka yang tidak valid, teks di luar rentang Int, jumlah negatif, atau jumlah di atas 1000 menghasilkan invalid tanpa mengubah status. Pertahankan semua yang kamu tulis pada langkah-langkah sebelumnya, termasuk setiap perintah dan balasan terdahulu. Dukung ADD|item|quantity: tambahkan jumlah yang valid ke stok item tersebut, yang awalnya nol, lalu balas added. Menambahkan nol tetap membuat item tersebut. Tambahkan GET|item: balas dengan kuantitasnya sebagai string, atau 0 jika item tidak ada. Tambahkan SELL|item|quantity: validasi jumlah terlebih dahulu menggunakan aturan yang sama seperti ADD. Untuk jumlah yang valid, balas insufficient jika stok tersedia lebih sedikit; jika tidak, kurangi stok dan balas sold. Item yang tidak ada memiliki stok tersedia nol. Menjual nol berhasil tanpa membuat item yang belum ada. Pertahankan item yang sudah ada meskipun stoknya nol. Input hanya menggunakan operasi yang didukung pada langkah ini.
Kecuali batas yang lebih ketat disebutkan di atas, koleksi berisi paling banyak 100 elemen pada setiap tingkat, dan argumen bilangan bulat serta nilai bilangan bulat dalam koleksi berada antara -1000 dan 1000. Teks yang diberikan untuk diuraikan 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; list dimulai dengan jumlah elemennya, lalu diikuti elemen-elemennya, dan map dimulai dengan jumlah entrinya, lalu diikuti setiap key dan value. List bertingkat mengulangi format jumlah-elemen untuk setiap baris. main yang disediakan mencetak nilai kembalian diikuti satu newline. List menggunakan format standar Kotlin dengan tanda kurung siku; jangan cetak 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")
}
}
"GET" -> replies.add((stock[item] ?: 0).toString())
}
}
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
4Koleksi Bersarang
List Berisi ListMenelusuri BarisRingkasan BarisMeratakan List BertingkatRangkuman, Baris Tempat Duduk7Alur Pemrosesan Koleksi
Transformasi dengan MapMemfilter NilaiMenguji Aturan KoleksiMengakumulasi dengan FoldRangkuman: Total yang Disetujui2Map Bagian 2
Menelusuri Entri MapKunci dan NilaiMap FrekuensiMap BersarangRingkasan: Laporan Frekuensi5Proyek: Buku Kontak
Menyimpan KontakMencari KontakLatihan sendiri: Playground Kotlin