أطول سلسلة استمرار
جزء من قسم المنطق والتدفق في رحلة Swift على Coddy. الدرس 35 من 56.
streak هو تسلسل من days متتالية تم فيها وضع علامة إنجاز على habit. بالنسبة إلى days [1, 2, 3, 5, 6]، فإن أطول تسلسل هو 3 (الأيام من 1 إلى 3).
حسابها مرة واحدة بعد حصولك على قائمة أيام مرتبة هو عملية مسح خطية بسيطة: قارن كل يوم باليوم السابق، ومدّد التسلسل الحالي عندما تكون الأيام متتالية، وإلا فأعد الضبط.
func longestStreak(_ days: [Int]) -> Int {
let sorted = days.sorted()
var best = 0
var run = 0
var prev: Int? = nil
for d in sorted {
if let p = prev, d == p + 1 {
run += 1
} else {
run = 1
}
if run > best { best = run }
prev = d
}
return best
}يتكرر النمط «تتبّع run الحالي + أفضل قيمة حتى الآن» في العديد من المسائل. تعرّف عليه مرة واحدة وسيظل معك إلى الأبد.
التحدي
متوسطاقرأ سطرًا واحدًا من الإدخال: قائمة مفصولة بفواصل من الإدخالات habit:day. أنشئ القاموس نفسه الذي أنشأته في الدرس السابق، ثم احسب لكل habit أطول streak لأيام متتالية خلال الأسبوع.
اطبع habits بترتيب أبجدي، واحدًا في كل سطر، بالتنسيق:
<habit>: streak=<n>بالنسبة إلى الإدخال read:1,read:2,read:3,read:5,workout:2,workout:4، يكون الناتج:
read: streak=3
workout: streak=1جرّب بنفسك
var habits: [String: [Int]] = [:]
let ops = readLine()!.components(separatedBy: ",")
for op in ops {
let parts = op.components(separatedBy: ":")
let day = Int(parts[1])!
if !(habits[parts[0], default: []].contains(day)) {
habits[parts[0], default: []].append(day)
}
}
// TODO: أطول سلسلة لكل عادة، اطبع مرتبة حسب الاسم كـ 'name: streak=n'
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق والتدفق
1النصوص بعمق
العد والفهارسحالة الأحرف وإزالة الفراغاتالبحث في النصوصتقسيم ودمج النصوصاستبدال النصوص الفرعيةمراجعة - التحقق من اسم المستخدم4المجموعات
إنشاء المجموعاتالاتحاد والتقاطعالطرح والفرق المتماثلالمجموعات الجزئية والشاملةمراجعة - تصفية الـ Tag7مشروع - متتبع العادات
نظرة عامة على المشروعتحديد كمكتمل2النطاقات والخطوات
المغلقة مقابل نصف المفتوحةالخطوة (Stride)دوال النطاقاتالنطاقات في Switchملخص - شبكة التقويم5الدوال من الرتبة العليا - الجزء الأول
MapFilterReduceربط Map و Filter و Reduceمراجعة - إحصائيات الكلماتتدرّب بنفسك: Playground لـ Swift