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

مراجعة - أسماء مستخدمين فريدة

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

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

challenge icon

التحدي

سهل

قم ببناء نظام لتسجيل أسماء المستخدمين يمنع تكرار الأسماء باستخدام أسلوب الـ set (المجموعة) المتبع في لغة Go. يوضح هذا التحدي كيفية إنشاء نظام قوي لإدارة المستخدمين يضمن تفرد اسم المستخدم عبر جميع التسجيلات.

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

  • سلسلة نصية تحتوي على أسماء المستخدمين الموجودة مسبقاً مفصولة بفاصلة (على سبيل المثال، "alice123,bob_dev,charlie2024,diana_codes")
  • سلسلة نصية تحتوي على محاولات تسجيل أسماء مستخدمين جديدة مفصولة بفاصلة (على سبيل المثال، "eve_user,alice123,frank_dev,bob_dev,grace2024,alice123")

مهمتك هي:

  1. إنشاء مجموعة (set) باستخدام أسلوب Go المتمثل في map[string]struct{} لتخزين أسماء المستخدمين المسجلين
  2. تحليل السلسلة النصية الأولى للمدخلات عن طريق تقسيمها عند الفواصل للحصول على أسماء المستخدمين الموجودة
  3. إضافة كل اسم مستخدم موجود إلى مجموعتك باستخدام قيمة الـ struct الفارغة {}
  4. تحليل السلسلة النصية الثانية للمدخلات عن طريق تقسيمها عند الفواصل للحصول على محاولات التسجيل الجديدة
  5. لكل محاولة تسجيل، تحقق مما إذا كان اسم المستخدم موجوداً بالفعل في المجموعة باستخدام أسلوب comma ok
  6. عرض عملية التسجيل لكل محاولة:
    • إذا كان اسم المستخدم متاحاً: "Registered: [username]" وقم بإضافته إلى المجموعة
    • إذا كان اسم المستخدم موجوداً بالفعل: "Username taken: [username]"
  7. بعد معالجة جميع محاولات التسجيل، قم بعرض ملخص شامل:
    • "Registration Summary:"
    • "Initial usernames: [initial_count]"
    • "Registration attempts: [attempts_count]"
    • "Successful registrations: [successful_count]"
    • "Rejected (duplicate): [rejected_count]"
    • "Total registered usernames: [total_count]"
  8. أخيراً، قم بإدراج جميع أسماء المستخدمين المسجلين في النظام:
    • العنوان: "All registered usernames:"
    • كل اسم مستخدم في سطر منفصل: "@[username]"

استخدم حزمة strings لتقسيم سلاسل المدخلات عند الفواصل. يوضح هذا التحدي كيف يوفر أسلوب الـ set في Go حلاً فعالاً لمنع التكرار في أنظمة تسجيل المستخدمين، مما يضمن سلامة البيانات مع توفير أداء بحث سريع للتحقق من صحة اسم المستخدم.

جرّب بنفسك

package main

import (
	"fmt"
	"sort"
	"strings"
)

func main() {
	// قراءة المدخلات
	var existingUsernames string
	var newRegistrations string
	fmt.Scanln(&existingUsernames)
	fmt.Scanln(&newRegistrations)
	
	// تحليل سلاسل المدخلات
	existing := strings.Split(existingUsernames, ",")
	attempts := strings.Split(newRegistrations, ",")
	
	// إنشاء مجموعة (set) باستخدام أسلوب Go
	userSet := make(map[string]struct{})
	
	// TODO: اكتب الكود الخاص بك أدناه
	// 1. إضافة أسماء المستخدمين الموجودة إلى المجموعة
	// 2. معالجة كل محاولة تسجيل
	// 3. عرض نتائج التسجيل لكل محاولة
	// 4. حساب وعرض الملخص
	// 5. قائمة بجميع أسماء المستخدمين المسجلين (تذكر الفرز للحصول على مخرجات متسقة)
	
}

جميع دروس Logic & Flow