Competitive Programming Academy · درس

لعبة Nim وعدد Grundy

حل الألعاب المحايدة باستخدام XOR

الدرس 2 من 413 خطوة

لعبة Nim وعدد Grundy درس مجاني في Competitive Programming Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Competitive Programming Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Competitive Programming Academy 4 دروس في المجموع.

تعرّفوا إلى لعبة Nim

في Nim توجد عدة أكوام من الحجارة. وفي دوركم، أزيلوا أي عدد من كومة واحدة، ويفوز اللاعب الذي يأخذ الحجر الأخير. 🪨

الكمية السحرية: XOR

تتحدد اللعبة بأكملها من خلال XOR لأحجام جميع الأكوام. فهذا العدد الوحيد يخبركم بمن سيفوز.

قاعدة مجموع Nim

إذا كان XOR للأكوام، المسمى nim-sum، يساوي صفرًا، فإن اللاعب الذي عليه الدور يخسر. وإذا كان غير صفري، يفوز ذلك اللاعب.

piles = [3, 4, 5]
nim_sum = 0
for p in piles:
    nim_sum ^= p

لماذا يعني الصفر وجود مشكلة

انطلاقًا من nim-sum يساوي صفرًا، تؤدي كل نقلة إلى كسر التوازن، فتمنح الخصم مجموعًا غير صفري يمكنه دائمًا إعادته إلى الصفر.

العثور على النقلة الرابحة

عندما يكون nim-sum غير صفري، توجد دائمًا نقلة تعيده إلى الصفر. وتضع هذه النقلة الخصم في وضع خاسر.

ما بعد Nim: أعداد Grundy

نستخدم في الألعاب المحايدة الأخرى عدد Grundy لكل حالة. وهو يعمم فكرة nim-sum على أي لعبة تقريبًا تعتمد على أخذ العناصر.

عملية mex

قيمة Grundy للحالة هي mex، أي أصغر عدد صحيح غير سالب غير موجود ضمن قيم Grundy لنقلاتها.

def mex(s):
    i = 0
    while i in s:
        i += 1
    return i

حساب Grundy بالاستدعاء التكراري

استدعوا جميع الحالات التي يمكن الوصول إليها تكراريًا، واجمعوا قيم Grundy الخاصة بها، ثم احسبوا mex لمجموعتها.

def grundy(n):
    return mex({grundy(n - k) for k in (1, 2, 3) if k <= n})

قيمة Grundy الصفرية تعني الخسارة

تكون حالة اللعبة ذات Grundy 0 وضعًا خاسرًا، تمامًا مثل nim-sum يساوي صفرًا. أما القيمة غير الصفرية فتعني الفوز.

مبرهنة Sprague-Grundy

بالنسبة إلى الألعاب المستقلة التي تُلعب معًا، احسبوا XOR لأعداد Grundy الخاصة بها. وتحول نتيجة Sprague-Grundy هذه مجموع أي ألعاب إلى لعبة Nim. ✨

متى تنطبق

تحتاج نظرية Grundy إلى لعبة محايدة؛ أي إن كلا اللاعبين يملكان النقلات نفسها، ويفوز آخر من ينفذ نقلة. تحققوا من ذلك قبل استخدامها.

تحقق سريع

تبدؤون لعبة Nim بأكوام أحجامها 1 و2 و3. هل أنتم الفائزون؟

مراجعة

تعتمد Nim على XOR للأكوام: فالقيمة الصفرية تعني الخسارة، وغير الصفرية تعني الفوز. وتوسع أعداد Grundy وmex هذه الفكرة لتشمل كثيرًا من الألعاب المحايدة. 🏆

البدء مجانًا

تعلم Python مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
30
الدروس
120

الأسئلة الشائعة

هل درس «لعبة Nim وعدد Grundy» مجاني؟

نعم — نص درس «لعبة Nim وعدد Grundy» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Competitive Programming Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Competitive Programming Academy 4 دروس في المجموع.

ماذا ستتعلم في «لعبة Nim وعدد Grundy»؟

حل الألعاب المحايدة باستخدام XOR تتمرن على Competitive Programming Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Competitive Programming Academy؟

لا تُشترط خبرة سابقة. Competitive Programming Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «لعبة Nim وعدد Grundy»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Competitive Programming Academy هذا؟

نعم. كل درس في Competitive Programming Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. حالات الفوز والخسارة في الألعاب
  2. لعبة Nim وعدد Grundy
  3. الالتقاء في المنتصف
  4. تصحيح الأخطاء بسرعة: اختبارات الضغط والفرز
← العودة إلى Competitive Programming Academy