Menu
Coddy logo textTech

הצגת שמות אנשי קשר

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

challenge icon

אתגר

קשה

השלם את contactBook עם הפרמטרים commands: List<String>, names: List<String>, phones: List<String>. בנה ספר אנשי קשר בזיכרון שמתחיל ריק בכל קריאה לפונקציה. שלוש הרשימות באורך שווה, לכל היותר 100. בכל אינדקס, commands בוחר פעולה; names ו-phones מספקים את הארגומנטים שלה. השמות הם מילים לא ריקות באותיות ASCII קטנות; מספרי הטלפון הם מחרוזות ספרות לא ריקות וחייבים להישאר מחרוזות כדי לשמר אפסים מובילים. כל פקודה מפיקה תשובה אחת ברשימה המוחזרת. השאר את כל מה שכתבת בשלבים הקודמים, כולל כל הפקודות והתשובות הקודמות. תמוך ב-PUT: שמור או החלף את מספר הטלפון עבור השם שסופק, ואז החזר את התשובה saved. הוסף FIND: החזר את מספר הטלפון השמור עבור השם שסופק, או את missing. מתעלמים מארגומנט מספר הטלפון שלו. הוסף REMOVE: הסר את השם שסופק והחזר את removed אם הוא היה קיים, או את missing אחרת. מתעלמים מארגומנט מספר הטלפון שלו. הוסף LIST: החזר את רשימת השמות השמורים, ממוינת, בפורמט הסוגריים המרובעים הסטנדרטי של Kotlin, לדוגמה [ada, bo], או [] כשהרשימה ריקה. מתעלמים משני ערכי הארגומנטים. השתמש ב-contacts.keys.sorted().toString() כדי ליצור את מחרוזת התשובה היחידה הזו. הקלט מכיל רק פקודות שנתמכות בשלב זה. מחרוזות של ארגומנטים שמתעלמים מהם יכולות להיות כל טקסט לא ריק.

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

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

נסו בעצמכם

fun contactBook(commands: List<String>, names: List<String>, phones: List<String>): List<String> {
    val contacts = mutableMapOf<String, String>()
    val replies = mutableListOf<String>()
    for (i in commands.indices) {
        val name = names[i]
        when (commands[i]) {
            "PUT" -> {
                contacts[name] = phones[i]
                replies.add("saved")
            }
            "FIND" -> replies.add(contacts[name] ?: "missing")
            "REMOVE" -> {
                if (contacts.containsKey(name)) {
                    contacts.remove(name)
                    replies.add("removed")
                } else replies.add("missing")
            }
        }
    }
    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)
    }
    val namesCount = readln().toInt()
    val names = mutableListOf<String>()
    for (i0 in 0 until namesCount) {
        val namesItem = readLine().orEmpty()
        names.add(namesItem)
    }
    val phonesCount = readln().toInt()
    val phones = mutableListOf<String>()
    for (i0 in 0 until phonesCount) {
        val phonesItem = readLine().orEmpty()
        phones.add(phonesItem)
    }
    println(contactBook(commands, names, phones))
}

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

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