Menu
Coddy logo textTech

בדיקת מלאי

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Kotlin של Coddy. שיעור 57 מתוך 63.

challenge icon

אתגר

קשה

השלם את runInventory עם הפרמטרים commands: List<String>. בנה מלאי שמתחיל ריק בכל קריאה לפונקציה. כל פקודה היא מחרוזת אחת שהשדות בה מופרדים באמצעות |. שמות הפריטים הם מילים באותיות ASCII קטנות. יש לכל היותר 100 פקודות. פצל כל פקודה לפי המפריד המילולי; לפקודות תמיד יש את מספר השדות הנכון עבור הפעולה שלהן. החזר תשובה אחת לכל פקודה. יש להסיר רווחים מכמויות לפני הניתוח; כמויות תקינות הן בין 0 ל-1000. טקסט מספרי לא תקין, טקסט מחוץ לטווח של Int, כמויות שליליות או כמויות מעל 1000 מפיקים invalid ללא שינוי במצב. שמור את כל מה שכתבת בשלבים הקודמים, כולל כל פקודה ותשובה קודמות. תמוך ב-ADD|item|quantity: הוסף כמות תקינה למלאי של אותו פריט, שערכו ההתחלתי הוא אפס, והחזר added. הוספה של אפס עדיין יוצרת את הפריט. הוסף תמיכה ב-GET|item: החזר את הכמות שלו כמחרוזת, או 0 כשהפריט אינו קיים. הקלט משתמש רק בפעולות שנתמכות בשלב זה.

אלא אם צוינו למעלה גבולות מחמירים יותר, אוספים מכילים לכל היותר 100 איברים בכל רמה, וארגומנטים של מספרים שלמים וערכי מספרים שלמים באוספים הם בין ‎-1000 ל-1000. טקסט שמסופק לניתוח יכול לכלול ייצוגים לא תקינים או מחוץ לטווח, כמתואר.

החזר ערך מסוג List<String>. השאר את קוד הקלט/פלט שסופק. הוא קורא ארגומנטים סקלריים, אחד בכל שורה; רשימה מתחילה במספר האיברים שלה ואחריו האיברים, ומפה מתחילה במספר הזוגות שלה ואחריו כל מפתח וערך. רשימות מקוננות חוזרות על התבנית של מספר איברים ואחריהם איברים עבור כל שורה. ה-main שסופקה מדפיסה את ערך ההחזרה ואחריו תו שורה חדשה אחד. רשימות משתמשות בתבנית הסוגריים המרובעים הרגילה של Kotlin; אל תדפיס תוויות נוספות.

נסו בעצמכם

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

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: Kotlin אונליין