Laporan Persediaan
Termasuk bagian Logika & Alur dalam perjalanan Kotlin di Coddy. Pelajaran 59 dari 63.
Tantangan
SulitLengkapi runInventory dengan parameter commands: List<String>. Buat inventaris yang dimulai dalam keadaan kosong pada setiap pemanggilan fungsi. Setiap perintah berupa satu string dengan field yang dipisahkan oleh |. Nama item berupa kata ASCII huruf kecil. Jumlah perintah paling banyak 100. Pisahkan setiap perintah menggunakan pemisah literal. Jumlah field pada setiap perintah selalu sesuai dengan operasinya. Kembalikan satu balasan untuk setiap perintah. Pangkas spasi pada kuantitas sebelum menguraikannya. Jumlah yang valid berada di 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 sebelumnya. Dukung ADD|item|quantity: tambahkan jumlah yang valid ke stok item tersebut, yang awalnya bernilai 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 yang 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. Tambahkan REPORT: balas dengan semua entri yang tersimpan dalam format item=quantity, dipisahkan oleh ; dan diurutkan secara alfabetis berdasarkan item. Sertakan entri dengan stok nol. Inventaris kosong menghasilkan empty. REPORT tidak memiliki field argumen. Input hanya menggunakan operasi yang didukung pada langkah ini.
Kecuali batas yang lebih ketat dinyatakan di atas, koleksi berisi paling banyak 100 elemen pada setiap tingkat, dan argumen integer serta nilai integer dalam koleksi berada di antara -1000 dan 1000. Teks yang diberikan untuk diurai 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, sedangkan map dimulai dengan jumlah entrinya, lalu diikuti setiap key dan value. Untuk list bertingkat, ulangi format jumlah-elemen untuk setiap baris. main yang disediakan mencetak nilai yang dikembalikan, lalu satu karakter 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")
}
}
"GET" -> replies.add((stock[item] ?: 0).toString())
"SELL" -> {
val amount = parts[2].trim().toIntOrNull()
val available = stock[item] ?: 0
if (amount == null || amount !in 0..1000) replies.add("invalid")
else if (amount > available) replies.add("insufficient")
else {
if (stock.containsKey(item)) stock[item] = available - amount
replies.add("sold")
}
}
}
}
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