צובר לוגים
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Swift של Coddy. שיעור 55 מתוך 56.
אתגר
בינוניאתם מעבדים יומני גישה. קראו שורת קלט אחת: רשימה מופרדת בפסיקים של רשומות level:user:bytes.
חלק מהרשומות שגויות ויש לדלג עליהן: כל רשומה שבה אי אפשר לנתח את bytes כמספר שלם, או שהערך של level אינו אחד מאלה: INFO, WARN, ERROR (תוך הבחנה בין אותיות גדולות לקטנות).
הדפיסו, לפי הסדר הזה:
- שורה אחת לכל רמה שהופיעה לפחות פעם אחת, ממוינות בסדר הקבוע הזה:
ERROR,WARN,INFO. כל שורה היא<level>: <count> (<bytes>), כאשרcountהוא מספר הרשומות התקינות ברמה הזאת, ו-bytesהוא סכום הבתים שלהן. Top user: <name> (<bytes>): המשתמש עם מספר הבתים הכולל הגדול ביותר בכל הרשומות התקינות. במקרה של שוויון, שברו אותו לפי סדר אלפביתי של השמות.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 אונליין