הסרת אנשי קשר
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Kotlin של Coddy. שיעור 23 מתוך 63.
אתגר
קשההשלימו את contactBook עם הפרמטרים commands: List<String>, names: List<String>, phones: List<String>. בנו ספר אנשי קשר בזיכרון שמתחיל ריק בכל קריאה לפונקציה. לשלוש הרשימות אורך זהה, לכל היותר 100. בכל אינדקס, commands בוחר פעולה; names ו-phones מספקות את הארגומנטים שלה. השמות הם מילים לא ריקות באותיות ASCII קטנות; מספרי הטלפון הם מחרוזות לא ריקות של ספרות וחייבים להישאר מחרוזות כדי לשמר אפסים מובילים. כל פקודה מפיקה תשובה אחת ברשימה המוחזרת. שמרו את כל מה שכתבתם בשלבים הקודמים, כולל כל הפקודות והתשובות הקודמות. תמכו ב-PUT: שמרו או החליפו את מספר הטלפון של השם הנתון, ואז השיבו saved. הוסיפו את FIND: השיבו עם מספר הטלפון השמור של השם הנתון, או missing. מתעלמים מארגומנט מספר הטלפון שלו. הוסיפו את REMOVE: הסירו את השם הנתון והשיבו removed אם הוא היה קיים, או missing אחרת. מתעלמים מארגומנט מספר הטלפון שלו. הקלטים מכילים רק פקודות שנתמכות בשלב זה. מחרוזות של ארגומנטים שמתעלמים מהם יכולות להיות כל טקסט לא ריק.
אלא אם צוינו למעלה גבולות מחמירים יותר, אוספים מכילים לכל היותר 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")
}
}
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))
}כל השיעורים ביחידה לוגיקה וזרימת תוכנית
4אוספים מקוננים
רשימות של רשימותמעבר על שורותסיכומים של שורותהשטחת רשימות מקוננותסיכום – שורות של מקומות ישיבה7צינורות עיבוד של אוספים
טרנספורמציה באמצעות Mapסינון ערכיםבדיקת כללי האוסףצבירה באמצעות Foldסיכום – סכומים מאושרים5פרויקט - ספר טלפונים
שמירת אנשי קשרחיפוש אנשי קשרתרגלו בעצמכם: Kotlin אונליין