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)

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