連絡先の統計
CoddyのKotlinジャーニー「ロジックとフロー」セクションの一部。レッスン 25/63。
チャレンジ
難しいパラメータ commands: List<String>、names: List<String>、phones: List<String>を持つ contactBook を完成させてください。関数呼び出しごとに空の状態から始まる、メモリ上の連絡先帳を構築します。3つのリストの長さは等しく、最大100です。各インデックスで、commands が操作を選択し、names と phones がその引数を提供します。名前は空でない小文字のASCII単語です。電話番号は空でない数字文字列であり、先頭のゼロを保持するため文字列のまま扱う必要があります。すべてのコマンドは、返されるリストに1つの応答を生成します。以前の手順で記述した内容をすべて保持し、それまでのすべてのコマンドと応答を含めてください。PUTをサポートしてください。指定された名前の電話番号を保存または置き換え、その後 saved と応答します。FINDを追加してください。指定された名前に保存されている電話番号を応答として返し、なければ missing とします。電話番号の引数は無視します。REMOVEを追加してください。指定された名前を削除し、存在していた場合は removed、それ以外の場合は missing と応答します。電話番号の引数は無視します。LISTを追加してください。保存されている名前をソートしたリストを、Kotlin標準の角括弧形式で応答します。たとえば [ada, bo]、空の場合は [] です。両方の引数値を無視します。この1つの応答文字列を作成するには、contacts.keys.sorted().toString()を使用してください。COUNTを追加してください。contacts=N;phones=P と応答し、Nを保存されている名前の数、Pを保存されている重複しない電話番号文字列の数に置き換えます。両方の引数を無視します。2つの名前が同じ電話番号を共有する場合があります。この手順でサポートされているコマンドのみが入力されます。無視される引数文字列には、空でない任意のテキストを使用できます。
上記でより厳しい上限が指定されていない限り、コレクションは各階層で最大100個の要素を含み、整数の引数と整数のコレクション値は -1000 から 1000 の範囲です。解析用に提供されるテキストには、説明されているように無効な表現や範囲外の表現が含まれる場合があります。
型 List<String> の値を返してください。提供された入力/出力コードを維持してください。スカラー引数は1行に1つずつ読み取られます。リストは個数の後に要素が続く形式で始まり、マップはエントリ数の後に各キーと値が続く形式で始まります。入れ子になったリストでは、各行について個数と要素の形式が繰り返されます。提供された main は、戻り値の後に改行を1つ出力します。リストには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))
}ロジックとフローのすべてのレッスン
自分で練習してみよう: Kotlinプレイグラウンド