Menu
Coddy logo textTech

Agregator logów

Część sekcji Logika i przepływ programu ścieżki Swift w Coddy. Lekcja 55 z 56.

challenge icon

Wyzwanie

Średni

Przetwarzasz logi dostępu. Odczytaj jeden wiersz wejścia: listę wpisów level:user:bytes rozdzielonych przecinkami.

Niektóre wpisy są nieprawidłowe i należy je pominąć: każdy wpis, którego wartości bytes nie da się sparsować jako liczby całkowitej lub którego level nie jest jednym z INFO, WARN, ERROR (rozróżniana jest wielkość liter).

Wypisz w tej kolejności:

  1. Jeden wiersz dla każdego poziomu, który pojawił się co najmniej raz, posortowane według tej ustalonej kolejności: ERROR, WARN, INFO. Każdy wiersz ma postać <level>: <count> (<bytes>), gdzie count to liczba prawidłowych wpisów o danym poziomie, a bytes to suma ich wartości w bajtach.
  2. Top user: <name> (<bytes>): użytkownik, który łącznie przesłał najwięcej bajtów we wszystkich prawidłowych wpisach. W przypadku remisu rozstrzygaj alfabetycznie według nazwy.
  3. Skipped: <n> z liczbą nieprawidłowych wpisów.

Dla danych wejściowych INFO:alice:100,WARN:bob:bad,ERROR:alice:50,INFO:bob:200,DEBUG:cara:10,INFO:alice:75 wynikiem jest:

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

Spróbuj swoich sił

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

// TODO: sparsuj każdy wpis, pomiń nieprawidłowe, zlicz według poziomu i użytkownika;
// wypisz poziomy w ustalonej kolejności (tylko te, które wystąpiły), użytkownika z największą liczbą wpisów, a następnie liczbę Skipped

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Edytor online Swift