Menu
Coddy logo textTech

Listar Nomes de Contatos

Parte da seção Lógica e Fluxo do Journey de Kotlin da Coddy. Lição 24 de 63.

challenge icon

Desafio

Difícil

Complete contactBook com os parâmetros commands: List<String>, names: List<String>, phones: List<String>. Construa uma agenda de contatos em memória que começa vazia a cada chamada da função. As três listas têm o mesmo tamanho, no máximo 100. Em cada índice, commands seleciona uma operação; names e phones fornecem seus argumentos. Os nomes são palavras ASCII minúsculas não vazias; os telefones são sequências não vazias de dígitos e devem permanecer como strings para preservar zeros à esquerda. Cada comando produz uma resposta na lista retornada. Mantenha tudo o que você escreveu nas etapas anteriores, incluindo todos os comandos e respostas anteriores. Suporte PUT: salve ou substitua o telefone do nome fornecido e, em seguida, responda saved. Adicione FIND: responda com o telefone armazenado para o nome fornecido ou missing. Seu argumento de telefone é ignorado. Adicione REMOVE: remova o nome fornecido e responda removed se ele existia ou missing caso contrário. Seu argumento de telefone é ignorado. Adicione LIST: responda com a lista ordenada dos nomes salvos no formato padrão entre colchetes do Kotlin, por exemplo [ada, bo], ou [] quando estiver vazia. Ambos os valores dos argumentos são ignorados. Use contacts.keys.sorted().toString() para criar essa única string de resposta. As entradas contêm apenas comandos suportados nesta etapa. As strings de argumentos ignorados podem ser qualquer texto não vazio.

A menos que limites mais rigorosos sejam especificados acima, as coleções contêm no máximo 100 elementos em cada nível, e os argumentos inteiros e os valores inteiros das coleções estão entre -1000 e 1000. O texto fornecido para análise pode incluir representações inválidas ou fora do intervalo, conforme descrito.

Retorne um valor do tipo List<String>. Mantenha o código de entrada/saída fornecido. Ele lê argumentos escalares, um por linha; uma lista começa com sua quantidade, seguida por seus elementos, e um mapa começa com a quantidade de suas entradas, seguida por cada chave e valor. Listas aninhadas repetem o formato de quantidade e elementos para cada linha. O main fornecido imprime o valor retornado seguido por uma nova linha. As listas usam o formato padrão entre colchetes do Kotlin; não imprima rótulos adicionais.

Experimente você mesmo

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 as lições de Lógica e Fluxo

Pratique por conta própria: Playground de Kotlin