أطول سلسلة استمرار
جزء من قسم المنطق والتدفق في رحلة Swift على Coddy. الدرس 35 من 56.
الـ سلسلة هي تتابع من الأيام المتتالية التي تم فيها وضع علامة الإنجاز على العادة. بالنسبة للأيام [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
}النمط، "تتبع التشغيل الحالي + الأفضل حتى الآن"، يتكرر في العديد من المشكلات. تعرف عليه مرة واحدة وسيبقى ملكك للأبد.
التحدي
متوسطاقرأ سطرًا واحدًا من المدخلات: قائمة مفصولة بفاصلة من مدخلات habit:day. قم ببناء نفس القاموس الذي أنشأته في الدرس السابق، ثم احسب لكل عادة أطول سلسلة أيام متتالية (streak) خلال الأسبوع.
اطبع العادات بترتيب أبجدي، واحدة في كل سطر، بالتنسيق التالي:
<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