Listar Nomes de Contatos
Parte da seção Lógica e Fluxo do Journey de Kotlin da Coddy. Lição 24 de 63.
Desafio
DifícilComplete 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
1Mapas — Parte 1
Criando mapasConsultas seguras em mapasAtualizando mapasVerificando chavesRecapitulação — Estoque4Coleções Aninhadas
Listas de ListasPercorrendo LinhasResumos das LinhasAchatar Listas AninhadasRecapitulação - Filas de Assentos7Fluxos de Coleções
Transformando com MapFiltrando ValoresTestando Regras de ColeçõesAcumulando com FoldRecapitulação - Totais Aprovados2Mapas — Parte 2
Percorrendo entradas de MapChaves e valoresMapas de frequênciaMapas aninhadosRecapitulação — Relatório de frequência5Projeto - Agenda de Contatos
Salvar ContatosEncontrar Contatos3Conjuntos e Associação
Criando ConjuntosAtualizando ConjuntosOperações com ConjuntosVerificando SubconjuntosRecapitulação - Convidados do Evento6Valores de Funções
Escrevendo LambdasTipos de FunçãoPassando FunçõesVariáveis CapturadasRecapitulação - Pontuação ConfigurávelPratique por conta própria: Playground de Kotlin