Menu
Coddy logo textTech

Elenca i nomi dei contatti

Fa parte della sezione Logica e flusso del percorso Kotlin di Coddy. Lezione 24 di 63.

challenge icon

Sfida

Difficile

Completa contactBook con i parametri commands: List<String>, names: List<String>, phones: List<String>. Crea una rubrica in memoria che sia vuota all'inizio di ogni chiamata della funzione. Le tre liste hanno la stessa lunghezza, al massimo 100. A ogni indice, commands seleziona un'operazione; names e phones ne forniscono gli argomenti. I nomi sono parole non vuote composte da caratteri ASCII minuscoli; i numeri di telefono sono stringhe non vuote di cifre e devono rimanere stringhe per preservare gli zeri iniziali. Ogni comando produce una risposta nell'elenco restituito. Mantieni tutto ciò che hai scritto nei passaggi precedenti, inclusi tutti i comandi e le risposte precedenti. Supporta PUT: salva o sostituisce il numero di telefono per il nome fornito, quindi rispondi saved. Aggiungi FIND: rispondi con il numero di telefono salvato per il nome fornito, oppure missing. L'argomento del numero di telefono viene ignorato. Aggiungi REMOVE: rimuovi il nome fornito e rispondi removed se esisteva oppure missing altrimenti. L'argomento del numero di telefono viene ignorato. Aggiungi LIST: rispondi con l'elenco ordinato dei nomi salvati nel formato standard di Kotlin tra parentesi quadre, ad esempio [ada, bo], oppure [] se è vuoto. Entrambi i valori degli argomenti vengono ignorati. Usa contacts.keys.sorted().toString() per creare questa singola stringa di risposta. Gli input contengono solo comandi supportati in questo passaggio. Le stringhe degli argomenti ignorati possono essere qualsiasi testo non vuoto.

A meno che sopra non siano indicati limiti più restrittivi, le raccolte contengono al massimo 100 elementi a ciascun livello e gli argomenti interi e i valori interi nelle raccolte sono compresi tra -1000 e 1000. Il testo fornito per l'analisi può includere rappresentazioni non valide o fuori intervallo, come descritto.

Restituisci un valore di tipo List<String>. Mantieni il codice di input/output fornito. Legge gli argomenti scalari uno per riga; un elenco inizia con il suo conteggio seguito dai suoi elementi, e una mappa inizia con il conteggio delle sue voci seguito da ciascuna chiave e valore. Gli elenchi annidati ripetono il formato conteggio-ed-elementi per ogni riga. Il main fornito stampa il valore restituito seguito da una nuova riga. Gli elenchi usano il formato standard di Kotlin tra parentesi quadre; non stampare etichette aggiuntive.

Provalo tu

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))
}

Tutte le lezioni di Logica e flusso

Esercitati da solo: Playground Kotlin