Agregator logów
Część sekcji Logika i przepływ programu ścieżki Swift w Coddy. Lekcja 55 z 56.
Wyzwanie
ŚredniPrzetwarzasz 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:
- 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>), gdziecountto liczba prawidłowych wpisów o danym poziomie, abytesto suma ich wartości w bajtach. 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.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: 2Spró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
1Dogłębnie o ciągach znaków
Liczba i indeksyWielkość liter i usuwanie białych znakówWyszukiwanie w ciągach znakówDzielenie i łączenieZastępowanie podciągówPodsumowanie — sprawdzanie nazwy użytkownika4Zbiory
Tworzenie zbiorówSuma i część wspólnaRóżnica i różnica symetrycznaPodzbiór i nadzbiórPowtórka — filtr tagów7Projekt – Śledzenie nawyków
Przegląd projektuOznacz jako wykonane10Projekt — silnik quizów
Przegląd projektuZadawanie pytań2Zakresy i kroki
Zakresy domknięte i półotwarteKrokMetody zakresówZakresy w instrukcji switchPowtórka — siatka kalendarza5Funkcje wyższego rzędu, część 1
MapFilterReduceŁączenie map, filter i reducePodsumowanie – statystyki słówPoćwicz samodzielnie: Edytor online Swift