סטטיסטיקה של אנשי קשר
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Kotlin של Coddy. שיעור 25 מתוך 63.
אתגר
קשההשלם את 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() כדי ליצור את מחרוזת התשובה היחידה הזו. הוסף את COUNT: השב עם contacts=N;phones=P, כאשר N מוחלף במספר השמות השמורים ו-P במספר מחרוזות מספרי הטלפון הייחודיות השמורות. מתעלמים משני הארגומנטים. לשני שמות יכולים להיות אותו מספר טלפון. הקלט מכיל רק פקודות שנתמכות בשלב זה. מחרוזות של ארגומנטים שמתעלמים מהם יכולות להיות כל טקסט לא ריק.
אלא אם צוין לעיל גבול מחמיר יותר, אוספים מכילים לכל היותר 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")
}
"LIST" -> replies.add(contacts.keys.sorted().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)
}
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 אונליין