Menu
Coddy logo textTech

השוואת שבועות

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

תכונה אחרונה: קחו נתונים של שבועיים ודווחו על השינוי בכל הרגל.

כל שבוע הוא רשימה נפרדת של פעולות habit:day בשורה משלו. בנו שני מילונים באותה הדרך שבה בניתם עד עכשיו, ואז השוו ביניהם.

קבוצת ההרגלים המעניינת היא איחוד המפתחות של שתי השבועות (הרגל עשוי להופיע בשבוע אחד אך לא בשני). עברו על האיחוד הזה כשהוא ממוין בסדר אלפביתי.

let allKeys = Set(weekA.keys).union(weekB.keys).sorted()
for name in allKeys {
    let a = weekA[name]?.count ?? 0
    let b = weekB[name]?.count ?? 0
    print("\(name): \(a) -> \(b)")
}

ה־?? 0 מטפל במקרה שבו המפתח חסר. weekA[name]?.count היא הדרך באמצעות שרשור אופציונלי לקרוא ספירה בלי לבצע תחילה unwrap; היא מחזירה nil כשהמפתח אינו קיים, ו־?? 0 הופך את זה לאפס.

challenge icon

אתגר

בינוני

קרא שתי שורות קלט, שכל אחת מהן היא רשימה מופרדת בפסיקים של רשומות habit:day (אחת לכל שבוע). עבור כל הרגל שמופיע באחד השבועות, הדפס שורה אחת בפורמט הזה:

<habit>: <a> -> <b> <arrow>

כאשר a הוא מספר הימים הייחודיים בשבוע 1, b הוא מספר הימים הייחודיים בשבוע 2, ו-arrow הוא:

  • UP כאשר b > a
  • DOWN כאשר b < a
  • SAME כאשר b == a

הדפס את ההרגלים בסדר אלפביתי. אחרי השורות של כל הרגל, הדפס שורת סיכום אחת:

Improved: <n>

כאשר n הוא מספר ההרגלים שהחץ שלהם הוא UP.

עבור הקלט read:1,read:3,workout:2 בשורה 1 ו-read:1,read:2,read:5,yoga:7 בשורה 2, הפלט הוא:

read: 2 -> 3 UP
workout: 1 -> 0 DOWN
yoga: 0 -> 1 UP
Improved: 2

נסו בעצמכם

func parse(_ line: String) -> [String: [Int]] {
    var habits: [String: [Int]] = [:]
    if line.isEmpty { return habits }
    for op in line.components(separatedBy: ",") {
        let parts = op.components(separatedBy: ":")
        let day = Int(parts[1])!
        if !(habits[parts[0], default: []].contains(day)) {
            habits[parts[0], default: []].append(day)
        }
    }
    return habits
}
let weekA = parse(readLine()!)
let weekB = parse(readLine()!)

// TODO: איחוד של המפתחות; לכל הרגל '<name>: a -> b ARROW'; ואז 'Improved: <n>'
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

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

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