Menu
Coddy logo textTech

Eliminar contactos

Parte de la sección Lógica y flujo del Journey de Kotlin de Coddy. Lección 23 de 63.

challenge icon

Desafío

Difícil

Completa contactBook con los parámetros commands: List<String>, names: List<String>, phones: List<String>. Crea un directorio 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. Las entradas contienen únicamente comandos admitidos en este paso. Las cadenas de argumentos ignorados 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, tal como 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 la cantidad de sus 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")
        }
    }
    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

Practica por tu cuenta: Playground de Kotlin