Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مجمّع السجلات

جزء من قسم المنطق والتدفق في رحلة Swift على Coddy. الدرس 55 من 56.

challenge icon

التحدي

متوسط

أنت تقوم بمعالجة سجلات الوصول. اقرأ سطراً واحداً من المدخلات: قائمة مفصولة بفاصلة من إدخالات level:user:bytes.

بعض الإدخالات غير صالحة ويجب تخطيها: أي إدخال لا يمكن فيه تحليل bytes كعدد صحيح، أو إذا لم يكن level واحداً من INFO، WARN، ERROR (حساس لحالة الأحرف).

اطبع، بهذا الترتيب:

  1. سطر واحد لكل مستوى (level) ظهر مرة واحدة على الأقل، مرتبة بهذا الترتيب الثابت: ERROR، WARN، INFO. كل سطر يكون بتنسيق <level>: <count> (<bytes>) حيث count هو عدد الإدخالات الصالحة في ذلك المستوى و bytes هو مجموع البايتات الخاصة بها.
  2. Top user: <name> (<bytes>): المستخدم الذي لديه أكبر إجمالي بايتات عبر جميع الإدخالات الصالحة. في حالة التعادل، يتم الفصل حسب الاسم أبجدياً.
  3. Skipped: <n> مع عدد الإدخالات المشوهة (malformed).

بالنسبة للمدخلات 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)

جميع دروس المنطق والتدفق

تدرّب بنفسك: Playground لـ Swift