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

مدقق أرقام بسيط

جزء من قسم Logic & Flow في رحلة GO على Coddy — الدرس 67 من 68.

challenge icon

التحدي

سهل

قم بإنشاء نظام للتحقق من الأرقام يوضح كيف تحدد الواجهات (interfaces) عقود السلوك بينما توفر الأخطاء المخصصة ملاحظات ذات مغزى عند فشل التحقق. سيختبر هذا التحدي قدرتك على إنشاء الواجهات، وتنفيذها باستخدام أنواع مخصصة، ومعالجة أخطاء التحقق بشكل مناسب.

ستتلقى مدخلين:

  • سلسلة نصية تحتوي على أرقام للتحقق منها مفصولة بفاصلة (على سبيل المثال، "45,150,25,200,75")
  • سلسلة نصية تحتوي على نطاق التحقق بتنسيق "min:max" (على سبيل المثال، "1:100")

مهمتك هي:

  1. تعريف واجهة Validator بطريقة واحدة: Validate() error
  2. إنشاء نوع خطأ مخصص يسمى هيكل ValidationError مع حقلين: Value (int) و Message (string)
  3. تنفيذ طريقة Error() string لـ ValidationError التي تعيد الرسالة بالتنسيق: "Validation failed: [message] (value: [value])"
  4. إنشاء هيكل NumberValidator مع ثلاثة حقول: Number (int) و Min (int) و Max (int)
  5. تنفيذ طريقة Validate() error لـ NumberValidator التي:
    • تعيد nil إذا كان الرقم ضمن النطاق الصالح (شاملاً)
    • تعيد ValidationError مع الرسالة "number below minimum range" إذا كان الرقم أقل من الحد الأدنى
    • تعيد ValidationError مع الرسالة "number above maximum range" إذا كان الرقم أكبر من الحد الأقصى
  6. تحليل المدخل الأول عن طريق التقسيم عند الفواصل للحصول على سلاسل الأرقام الفردية
  7. تحليل المدخل الثاني عن طريق التقسيم عند النقطتين الرأسيتين لاستخراج قيم الحد الأدنى والحد الأقصى
  8. تحويل جميع القيم النصية إلى أعداد صحيحة باستخدام حزمة strconv
  9. عرض رأس التحقق: "=== NUMBER VALIDATION SYSTEM ==="
  10. عرض معلمات التحقق: "Validating numbers in range [min] to [max]"
  11. لكل رقم:
    • إنشاء مثيل NumberValidator مع الرقم وقيم النطاق
    • استدعاء طريقة Validate() على المدقق
    • إذا نجح التحقق (الخطأ هو nil)، اعرض: "✓ [number] is valid"
    • إذا فشل التحقق (الخطأ ليس nil)، اعرض: "✗ [error_message]"
  12. عرض ملخص التحقق:
    • "=== VALIDATION SUMMARY ==="
    • "Total numbers checked: [total_count]"
    • "Valid numbers: [valid_count]"
    • "Invalid numbers: [invalid_count]"
  13. عرض رسالة الإكمال: "Number validation completed successfully"

استخدم حزمة strings لتقسيم السلاسل النصية المدخلة، وحزمة strconv لتحويل السلاسل النصية إلى أعداد صحيحة، وحزمة fmt للإخراج المنسق. يوضح هذا التحدي كيفية إنشاء أنظمة تحقق مرنة باستخدام الواجهات مع توفير معلومات خطأ مفصلة من خلال أنواع الأخطاء المخصصة.

جرّب بنفسك

package main

import (
	"fmt"
	"strconv"
	"strings"
)

func main() {
	// قراءة المدخلات
	var numbersInput string
	var rangeInput string
	fmt.Scanln(&numbersInput)
	fmt.Scanln(&rangeInput)
	
	// تحليل المدخلات
	numberStrings := strings.Split(numbersInput, ",")
	rangeParts := strings.Split(rangeInput, ":")
	
	// تحويل قيم النطاق إلى أعداد صحيحة
	min, _ := strconv.Atoi(rangeParts[0])
	max, _ := strconv.Atoi(rangeParts[1])
	
	// TODO: اكتب الكود الخاص بك أدناه
	// 1. تعريف واجهة Validator
	// 2. إنشاء هيكل ValidationError وتطبيق طريقة Error()
	// 3. إنشاء هيكل NumberValidator وتطبيق طريقة Validate()
	// 4. معالجة كل رقم والتحقق من صحته
	// 5. عرض النتائج والملخص
	
	// عرض ترويسة التحقق
	fmt.Println("=== NUMBER VALIDATION SYSTEM ===")
	fmt.Printf("Validating numbers in range %d to %d\n", min, max)
	
	// معالجة كل رقم هنا
	
	// عرض ملخص التحقق
	fmt.Println("=== VALIDATION SUMMARY ===")
	// أضف مخرجات الملخص هنا
	
	fmt.Println("Number validation completed successfully")
}

جميع دروس Logic & Flow