Menu
Coddy logo textTech

Log-Aggregator

Teil des Abschnitts Logik & Kontrollfluss der Swift-Journey von Coddy. Lektion 55 von 56.

challenge icon

Aufgabe

Mittel

Du verarbeitest Zugriffsprotokolle. Lies eine einzelne Eingabezeile ein: eine durch Kommas getrennte Liste von level:user:bytes-Einträgen.

Einige Einträge sind fehlerhaft und sollten übersprungen werden: jeder Eintrag, dessen bytes nicht als Ganzzahl geparst werden kann oder dessen level nicht eines von INFO, WARN, ERROR ist (Groß-/Kleinschreibung wird beachtet).

Gib Folgendes in dieser Reihenfolge aus:

  1. Eine Zeile pro Level, das mindestens einmal vorkam, sortiert in dieser festen Reihenfolge: ERROR, WARN, INFO. Jede Zeile hat das Format <level>: <count> (<bytes>), wobei count die Anzahl der gültigen Einträge für dieses Level und bytes die Summe ihrer Bytes ist.
  2. Top user: <name> (<bytes>): der Benutzer mit den meisten Bytes insgesamt über alle gültigen Einträge hinweg. Bei Gleichstand werden die Namen alphabetisch sortiert.
  3. Skipped: <n> mit der Anzahl der fehlerhaften Einträge.

Für die Eingabe INFO:alice:100,WARN:bob:bad,ERROR:alice:50,INFO:bob:200,DEBUG:cara:10,INFO:alice:75 lautet die Ausgabe:

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

Probier es selbst

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

// TODO: Jede Eingabe parsen, ungültige verwerfen, pro Ebene + pro Benutzer akkumulieren;
// Ebenen in fester Reihenfolge ausgeben (nur wenn vorhanden), Top-Benutzer, dann Anzahl der übersprungenen Einträge

Alle Lektionen in Logik & Kontrollfluss

Übe selbstständig: Swift-Playground