Menu
Coddy logo textTech

צובר לוגים

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Swift של Coddy. שיעור 55 מתוך 56.

challenge icon

אתגר

בינוני

אתם מעבדים יומני גישה. קראו שורת קלט אחת: רשימה מופרדת בפסיקים של רשומות level:user:bytes.

חלק מהרשומות שגויות ויש לדלג עליהן: כל רשומה שבה אי אפשר לנתח את bytes כמספר שלם, או שהערך של level אינו אחד מאלה: INFO, WARN, ERROR (תוך הבחנה בין אותיות גדולות לקטנות).

הדפיסו, לפי הסדר הזה:

  1. שורה אחת לכל רמה שהופיעה לפחות פעם אחת, ממוינות בסדר הקבוע הזה: ERROR, WARN, INFO. כל שורה היא <level>: <count> (<bytes>), כאשר count הוא מספר הרשומות התקינות ברמה הזאת, ו-bytes הוא סכום הבתים שלהן.
  2. Top user: <name> (<bytes>): המשתמש עם מספר הבתים הכולל הגדול ביותר בכל הרשומות התקינות. במקרה של שוויון, שברו אותו לפי סדר אלפביתי של השמות.
  3. Skipped: <n> עם מספר הרשומות הפגומות.

עבור הקלט INFO:alice:100,WARN:bob:bad,ERROR:alice:50,INFO:bob:200,DEBUG:cara:10,INFO:alice:75, הפלט הוא:

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

נסו בעצמכם

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

// TODO: נתח כל רשומה, דלג על רשומות לא תקינות, וצבּור נתונים לפי רמה ולפי משתמש;
// הדפס את הרמות בסדר קבוע (רק אם הופיעו), את המשתמש המוביל, ואז את הספירה של Skipped

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: Swift אונליין