Menu
Coddy logo textTech

Statistiche dei contatti

Fa parte della sezione Logica e flusso del percorso Kotlin di Coddy. Lezione 25 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 inizi vuota a 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 ASCII minuscole non vuote; i numeri di telefono sono stringhe di cifre non vuote e devono rimanere stringhe per preservare gli zeri iniziali. Ogni comando produce una risposta nell’elenco restituito. Conserva 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, poi risponde saved. Aggiungi FIND: risponde con il numero di telefono salvato per il nome fornito, oppure missing. L’argomento del numero di telefono viene ignorato. Aggiungi REMOVE: rimuove il nome fornito e risponde removed se esisteva, oppure missing altrimenti. L’argomento del numero di telefono viene ignorato. Aggiungi LIST: risponde con l’elenco ordinato dei nomi salvati nel formato standard tra parentesi quadre di Kotlin, 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. Aggiungi COUNT: risponde con contacts=N;phones=P, sostituendo N con il numero di nomi salvati e P con il numero di stringhe di telefono distinte memorizzate. Entrambi gli argomenti vengono ignorati. Due nomi possono condividere un numero di telefono. Gli input contengono solo comandi supportati in questo passaggio. Le stringhe degli argomenti ignorati possono essere qualsiasi testo non vuoto.

A meno che non siano specificati limiti più restrittivi sopra, le raccolte contengono al massimo 100 elementi a ogni 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 conteggio seguito dai suoi elementi e una mappa inizia con il conteggio delle voci seguito da ogni chiave e valore. Gli elenchi annidati ripetono il formato conteggio-ed-elementi per ogni riga. Il main fornito stampa il valore restituito seguito da un carattere di nuova riga. Gli elenchi usano il formato standard tra parentesi quadre di Kotlin; 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")
            }
            "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))
}

Tutte le lezioni di Logica e flusso

Esercitati da solo: Playground Kotlin