Menu
Coddy logo textTech

Stok Satışı

Coddy'nin Kotlin Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 58 / 63.

challenge icon

Görev

Zor

runInventory işlevini commands: List<String> parametresiyle tamamla. Her işlev çağrısı için boş başlayan bir envanter oluştur. Her komut, alanları | ile ayrılmış tek bir dizedir. Ürün adları küçük ASCII sözcükleridir. En fazla 100 komut vardır. Her komutu gerçek ayırıcıya göre böl; komutlar, işlemleri için her zaman doğru sayıda alana sahiptir. Her komut için bir yanıt döndür. Miktarlar ayrıştırılmadan önce baştaki ve sondaki boşluklardan arındırılır; geçerli miktarlar 0 ile 1000 arasındadır. Geçersiz sayısal metin, Int aralığı dışındaki metin, negatif miktarlar veya 1000'den büyük miktarlar, durum değişikliği olmadan invalid üretir. Önceki adımlarda yazdığın her şeyi, daha önceki her komut ve yanıt da dahil olmak üzere koru. ADD|item|quantity desteği ekle: geçerli miktarı, başlangıçta sıfır olan ilgili ürünün stokuna ekle ve added yanıtını ver. Sıfır eklemek de ürünü oluşturur. GET|item desteği ekle: ürünün miktarını dize olarak, ürün yoksa 0 yanıtını ver. SELL|item|quantity desteği ekle: önce miktarı ADD ile aynı kuralları kullanarak doğrula. Miktar geçerliyse kullanılabilir stok daha az olduğunda insufficient yanıtını ver; aksi takdirde miktarı çıkar ve sold yanıtını ver. Olmayan bir ürünün kullanılabilir miktarı sıfırdır. Sıfır satışı, eksik ürünü oluşturmadan başarılı olur. Stoku sıfır olan mevcut ürünleri koru. Girdi, yalnızca bu adımda desteklenen işlemleri kullanır.

Yukarıda daha katı sınırlar belirtilmediği sürece koleksiyonlar her düzeyde en fazla 100 öğe içerir; tamsayı bağımsız değişkenler ve tamsayı koleksiyon değerleri -1000 ile 1000 arasındadır. Ayrıştırma için sağlanan metin, açıklandığı üzere geçersiz veya aralık dışı gösterimler içerebilir.

List<String> türünde bir değer döndür. Sağlanan girdi/çıktı kodunu koru. Bu kod, skaler bağımsız değişkenleri satır başına bir tane okur; bir liste, ardından elemanları gelen sayısıyla başlar ve bir eşlem, ardından her anahtar ve değerinin geldiği giriş sayısıyla başlar. İç içe listeler, her satır için sayı ve elemanlar biçimini tekrarlar. Sağlanan main, dönüş değerini ve ardından bir satır sonunu yazdırır. Listeler Kotlin'in standart köşeli parantezli biçimini kullanır; ek etiket yazdırma.

Kendin dene

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

Mantık ve Akış bölümündeki tüm dersler

Kendi başına pratik yap: Kotlin playground