Menu
Coddy logo textTech

Stok Kontrolü

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

challenge icon

Görev

Zor

runInventory işlevini commands: List<String> parametresiyle tamamlayın. Her işlev çağrısı için başlangıçta boş olan bir envanter oluşturun. Her komut, alanları | ile ayrılmış tek bir dizedir. Öğe adları küçük harfli ASCII sözcüklerdir. En fazla 100 komut vardır. Her komutu gerçek ayırıcıya göre bölün; komutlar, işlemleri için her zaman doğru sayıda alana sahiptir. Her komut için bir yanıt döndürün. 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. Daha önceki adımlarda yazdığınız her şeyi, önceki tüm komutlar ve yanıtlar dahil olmak üzere koruyun. ADD|item|quantity desteği ekleyin: geçerli bir miktarı, başlangıçta sıfır olan ilgili öğenin stokuna ekleyin ve added yanıtını verin. Sıfır eklemek de öğeyi oluşturur. GET|item desteği ekleyin: öğenin miktarını dize olarak, öğe yoksa 0 yanıtını verin. Girdi, bu adımda desteklenen işlemleri kullanır.

Yukarıda daha sıkı 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ığı gibi geçersiz veya aralık dışı gösterimler içerebilir.

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

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