Listar nombres de contactos
Parte de la sección Lógica y flujo del Journey de Kotlin de Coddy. Lección 24 de 63.
Desafío
DifícilCompleta contactBook con los parámetros commands: List<String>, names: List<String>, phones: List<String>. Construye un libro de contactos en memoria que comience vacío en cada llamada a la función. Las tres listas tienen la misma longitud, como máximo 100. En cada índice, commands selecciona una operación; names y phones proporcionan sus argumentos. Los nombres son palabras ASCII en minúsculas no vacías; los teléfonos son cadenas de dígitos no vacías y deben mantenerse como cadenas para conservar los ceros iniciales. Cada comando produce una respuesta en la lista devuelta. Conserva todo lo que escribiste en los pasos anteriores, incluidos todos los comandos y respuestas anteriores. Admite PUT: guarda o reemplaza el teléfono del nombre proporcionado y, después, responde saved. Añade FIND: responde con el teléfono almacenado para el nombre proporcionado o missing. Su argumento de teléfono se ignora. Añade REMOVE: elimina el nombre proporcionado y responde removed si existía o missing en caso contrario. Su argumento de teléfono se ignora. Añade LIST: responde con la lista ordenada de nombres guardados en el formato estándar entre corchetes de Kotlin, por ejemplo [ada, bo], o [] cuando está vacía. Ambos valores de los argumentos se ignoran. Usa contacts.keys.sorted().toString() para crear esta única cadena de respuesta. Las entradas contienen únicamente comandos admitidos en este paso. Las cadenas de argumentos ignoradas pueden ser cualquier texto no vacío.
A menos que se indiquen límites más estrictos arriba, las colecciones contienen como máximo 100 elementos en cada nivel, y los argumentos enteros y los valores enteros de las colecciones están entre -1000 y 1000. El texto proporcionado para el análisis puede incluir representaciones no válidas o fuera de rango, según se describe.
Devuelve un valor de tipo List<String>. Conserva el código de entrada/salida proporcionado. Lee los argumentos escalares, uno por línea; una lista comienza con su cantidad seguida de sus elementos, y un mapa comienza con su cantidad de entradas seguida de cada clave y valor. Las listas anidadas repiten el formato de cantidad y elementos para cada fila. El main proporcionado imprime el valor devuelto seguido de un salto de línea. Las listas usan el formato estándar entre corchetes de Kotlin; no imprimas etiquetas adicionales.
Pruébalo tú mismo
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))
}Todas las lecciones de Lógica y flujo
1Mapas Parte 1
Crear mapasBúsquedas seguras en mapasActualizar mapasComprobar clavesRepaso - Stock Desk4Colecciones anidadas
Listas de listasRecorrer filasResúmenes de filasAplanar listas anidadasRepaso: filas de asientos7Flujos de colecciones
Transformar con MapFiltrar valoresProbar reglas de coleccionesAcumular con FoldRepaso: totales aprobados2Mapas, parte 2
Iterar entradas de mapasClaves y valoresMapas de frecuenciaMapas anidadosRepaso: informe de frecuencias5Proyecto - Agenda de contactos
Guardar contactosBuscar contactos3Conjuntos y pertenencia
Crear conjuntosActualizar conjuntosOperaciones con conjuntosComprobación de subconjuntosRepaso: invitados al evento6Valores de función
Escribir lambdasTipos de funciónPasar funcionesVariables capturadasRepaso - Puntuación configurablePractica por tu cuenta: Playground de Kotlin