Menu
Coddy logo textTech

Rimuovi contatti

Fa parte della sezione Logica e flusso del percorso Kotlin di Coddy. Lezione 23 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 parte 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 non vuote composte da lettere minuscole; i numeri di telefono sono stringhe non vuote composte da cifre e devono restare stringhe per preservare gli zeri iniziali. Ogni comando produce una risposta nella lista restituita. 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 memorizzato per il nome fornito, oppure missing. Il suo argomento phone viene ignorato. Aggiungi REMOVE: rimuove il nome fornito e risponde removed se esisteva oppure missing altrimenti. Il suo argomento phone viene ignorato. 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ù rigorosi sopra, le raccolte contengono al massimo 100 elementi a ogni livello, e gli argomenti interi e i valori interi delle 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; una lista inizia con il suo conteggio seguito dai suoi elementi, e una mappa inizia con il conteggio delle sue voci seguito da ogni chiave e valore. Le liste annidate ripetono il formato conteggio-ed-elementi per ogni riga. Il main fornito stampa il valore restituito seguito da un carattere di nuova riga. Le liste 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")
        }
    }
    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