Menu
Coddy logo textTech

Aggregatore di log

Fa parte della sezione Logica e flusso del percorso Swift di Coddy. Lezione 55 di 56.

challenge icon

Sfida

Medio

Stai elaborando log di accesso. Leggi una singola riga di input: un elenco separato da virgole di voci level:user:bytes.

Alcune voci non sono valide e vanno ignorate: qualsiasi voce il cui bytes non può essere analizzato come intero, oppure il cui level non è uno tra INFO, WARN, ERROR (con distinzione tra maiuscole e minuscole).

Stampa, in questo ordine:

  1. Una riga per ogni livello apparso almeno una volta, ordinati in questo ordine fisso: ERROR, WARN, INFO. Ogni riga è <level>: <count> (<bytes>), dove count è il numero di voci valide a quel livello e bytes è la somma dei loro byte.
  2. Top user: <name> (<bytes>): l'utente con il maggior numero totale di byte in tutte le voci valide. In caso di parità, ordina i nomi alfabeticamente.
  3. Skipped: <n> con il numero di voci malformate.

Per l'input INFO:alice:100,WARN:bob:bad,ERROR:alice:50,INFO:bob:200,DEBUG:cara:10,INFO:alice:75, l'output è:

ERROR: 1 (50)
INFO: 3 (375)
Top user: alice (225)
Skipped: 2

Provalo tu

let entries = readLine()!.components(separatedBy: ",")
let order = ["ERROR", "WARN", "INFO"]
let validLevels: Set<String> = ["INFO", "WARN", "ERROR"]

// TODO: analizza ogni voce, scarta quelle non valide, accumula i conteggi per livello e per utente;
// stampa i livelli in ordine fisso (solo se presenti), l'utente con il conteggio più alto, poi il conteggio Skipped

Tutte le lezioni di Logica e flusso

Esercitati da solo: Playground Swift