Menu
Coddy logo textTech

Log-Aggregator

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

challenge icon

Aufgabe

Mittel

Sie verarbeiten Zugriffsprotokolle. Lesen Sie eine einzelne Eingabezeile: 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 interpretiert werden können oder dessen level nicht einer der Werte INFO, WARN, ERROR (Groß-/Kleinschreibung beachten) ist.

Geben Sie in dieser Reihenfolge Folgendes 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 auf diesem Level und bytes die Summe ihrer Bytes ist.
  2. Top user: <name> (<bytes>): der Benutzer mit den meisten Gesamt-Bytes über alle gültigen Einträge hinweg. Lösen Sie Gleichstände alphabetisch nach dem Namen auf.
  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