Menu
Coddy logo textTech

Estatísticas de Contatos

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

challenge icon

Desafio

Difícil

Complete contactBook com os parâmetros commands: List<String>, names: List<String>, phones: List<String>. Crie uma agenda de contatos em memória que comece 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 strings 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 de 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. Adicione COUNT: responda com contacts=N;phones=P, substituindo N pelo número de nomes salvos e P pelo número de strings de telefone armazenadas distintas. Dois nomes podem compartilhar um telefone. As entradas contêm apenas comandos compatíveis com esta 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 quebra de 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")
            }
            "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))
}

Todas as lições de Lógica e Fluxo

Pratique por conta própria: Playground de Kotlin