Menu
CoddyTech

Pengumpul Log

Termasuk bagian Logika dan Alur dalam perjalanan Swift di Coddy. Pelajaran 55 dari 56.

challenge icon

Tantangan

Sedang

Kamu sedang memproses log akses. Baca satu baris input: daftar entri level:user:bytes yang dipisahkan dengan koma.

Beberapa entri tidak valid dan harus dilewati: entri apa pun yang bytes-nya tidak dapat diuraikan sebagai bilangan bulat, atau yang level-nya bukan salah satu dari INFO, WARN, ERROR (peka huruf besar-kecil).

Cetak dengan urutan berikut:

  1. Satu baris untuk setiap level yang muncul setidaknya sekali, diurutkan menurut urutan tetap ini: ERROR, WARN, INFO. Setiap baris berbentuk <level>: <count> (<bytes>), dengan count sebagai jumlah entri valid pada level tersebut dan bytes sebagai jumlah byte-nya.
  2. Top user: <name> (<bytes>): pengguna dengan jumlah byte total terbanyak dari semua entri valid. Jika seri, urutkan berdasarkan nama secara alfabetis.
  3. Skipped: <n> dengan jumlah entri yang formatnya tidak valid.

Untuk input INFO:alice:100,WARN:bob:bad,ERROR:alice:50,INFO:bob:200,DEBUG:cara:10,INFO:alice:75, output-nya adalah:

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

Coba sendiri

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

// TODO: uraikan setiap entri, buang yang tidak valid, lalu hitung jumlah per level dan per pengguna;
// tampilkan level dalam urutan tetap (hanya yang muncul), pengguna teratas, lalu jumlah Skipped

Semua pelajaran di Logika dan Alur

Latihan sendiri: Playground Swift