جميع المقالات

كيف تُصنع ألغاز Griductive

نظرة من وراء الكواليس على كيفية توليد Griductive للألغاز باستخدام تلبية القيود، ولماذا كل لغز مضمون رياضياً بأن له حلاً وحيداً بالضبط.

بقلم Shawn

كل لغز في Griductive يقدم وعداً جريئاً: لن تحتاج أبداً إلى التخمين. كل خلية يمكن تحديدها بالمنطق وحده، وكل لغز له إجابة صحيحة واحدة بالضبط.

هذا ليس هدفاً تصميمياً — إنه ضمان رياضي، مُنفَّذ بنفس فئة المحلّلات المستخدمة في بحوث العمليات والتحقق من الرقائق. هذا المقال يشرح كيف.


لماذا التفرد مهم

إذا كان للغز حلان صالحان، فلا بد من وجود خلية واحدة على الأقل حيث يستوفي كلٌ من المشتبه به والبريء جميع الأدلة. عند تلك الخلية، لا يمكن لأي قدر من التفكير أن يخبرك أيهما الصحيح — سيتعين عليك التخمين. والتخمين ينتهك العقد الأساسي لأي لغز استنتاجي.

لذلك لا يكتفي المولّد بإنتاج ألغاز تصادف أن لها حلاً واحداً. بل يُثبت أنه لا يوجد حل ثانٍ قبل نشر أي لغز.


خط الإنتاج ذو المراحل الخمس

يُبنى كل لغز في Griductive عبر خط إنتاج من خمس مراحل. إليك ما يحدث في كل مرحلة.

المرحلة 1: توليد حل عشوائي

يبدأ المولّد بإنشاء شبكة حل صالحة — تعيين عشوائي لمشتبه به أو بريء لكل خلية. هذه هي الحقيقة الأساسية التي سيستنتجها اللاعب في النهاية.

في هذه المرحلة، لا توجد أدلة بعد. اللوحة مجرد تكوين عشوائي يستوفي القيود الهيكلية الأساسية (أبعاد الشبكة، عدد المشتبه بهم ضمن نطاقات صالحة).

المرحلة 2: بناء مجموعة الأدلة

بعد ذلك، يُعدّد المولّد بشكل شامل كل دليل ممكن يكون صحيحاً على لوحة الحل.

يمتلك Griductive أكثر من 26 نوعاً مختلفاً من الأدلة — عدّ، مقارنة، مكانية، وجودية، تفرد، اتصال، وغيرها. لكل نوع، يختبر المولّد كل معلمة صالحة مقابل اللوحة. شبكة 4×4 يمكن أن تنتج آلاف الأدلة المرشحة. فقط الأدلة التي تُقيَّم كصحيحة على الحل تُحفظ.

هذه هي المادة الخام التي يعمل بها المولّد: مجموعة ضخمة من العبارات الصحيحة، معظمها مكرر.

المرحلة 3: اختيار مجموعة أدلة مُصغَّرة (الجزء الصعب)

هنا يحدث العمل الحقيقي. يحتاج المولّد لاختيار مجموعة فرعية صغيرة من الأدلة من المجموعة بحيث:

  1. الأدلة كافية — معاً، تُقيّد فضاء الحلول إلى لوحة صالحة واحدة بالضبط.
  2. لا دليل زائد — حذف أي دليل واحد سيسمح بحلول متعددة.

يستخدم المولّد نهج تلبية القيود الجشع:

  1. ابدأ بدون أدلة مختارة. فضاء الحلول مفتوح على مصراعيه — لوحات عديدة يمكن أن تكون صالحة.
  2. قيّم كل دليل مرشح بمقدار ما يُضيّق فضاء الحلول. الدليل الذي يستبعد 80% من الاحتمالات المتبقية يسجل أعلى من الذي يستبعد 10%.
  3. اختر الدليل الأعلى تقييماً وأضفه إلى المجموعة.
  4. أعد حل نموذج القيود مع مجموعة الأدلة المُحدَّثة.
  5. كرر حتى يؤكد المحلّل أنه لم يتبق سوى حل واحد.
  6. التنقية: امشِ عبر المجموعة النهائية واحذف أي دليل غير ضروري للتفرد. هذا يحافظ على نظافة اللغز ويتجنب إعطاء اللاعب معلومات مجانية.

النتيجة هي مجموعة أدلة محكمة وعادلة — كافية لحل اللغز بالكامل، دون أدلة مهدرة.

المرحلة 4: تقييم الصعوبة

مع تثبيت مجموعة الأدلة، يُقيّم المولّد صعوبة اللغز على مقياس من 0 إلى 100. أربعة عوامل تساهم:

  • نسبة الأدلة البسيطة (35%) — كم من الأدلة عبارات عدّ أو هوية مباشرة. أدلة بسيطة أكثر تعني لغزاً أسهل.
  • نسبة الأدلة المعقدة (30%) — كم من الأدلة تتطلب تفكيراً متعدد الخطوات أو مكانياً. هذه تتطلب سلاسل استنتاج أعمق.
  • شُح المعلومات (20%) — كم الأدلة قليلة نسبة إلى حجم الشبكة. أدلة أقل تعني مادة أقل للعمل بها.
  • مقياس الشبكة (15%) — الشبكات الأكبر أصعب بطبيعتها في التتبع. لغز 5×5 يحتوي على ما يقارب ثلاثة أضعاف خلايا لغز 3×3.

لكل نوع دليل أيضاً تصنيف تعقيد جوهري بناءً على التفكير الذي يتطلبه. دليل مثل "جوليا مشتبه بها" بسيط للغاية. دليل مثل "جوليا هي الشخص الوحيد في الصف 3 الذي لديه جار مشتبه به واحد بالضبط" يتطلب مقارنة عدة خلايا ويُقيَّم أعلى بكثير.

المرحلة 5: توليد التلميحات وتنسيق المخرجات

أخيراً، يبني المولّد تسلسل التلميحات — ترتيب حل مُوصى به يرشد اللاعبين العالقين عبر اللغز خطوة منطقية واحدة في كل مرة. تُرتَّب التلميحات حسب عمق التبعية: الخلايا التي يمكن استنتاجها فوراً تأتي أولاً، والخلايا التي تتطلب سلاسل طويلة من الاستنتاجات السابقة تأتي أخيراً.

يُعبأ اللغز النهائي بكل البيانات التي تحتاجها اللعبة: البيانات الوصفية، مجموعة الأدلة، تسلسل التلميحات، ودرجة الصعوبة.


المحلّل: كيف يُثبَت التفرد

في قلب خط الإنتاج يوجد Google OR-Tools CP-SAT — محلّل برمجة قيود يجمع بين نشر القيود والبرمجة الصحيحة وحل SAT.

كيف يصبح اللغز مسألة رياضية

تُنمذَج كل خلية على الشبكة كـمتغير بولياني: مشتبه به (1) أو بريء (0). كل دليل يصبح قيداً رياضياً واحداً أو أكثر على تلك المتغيرات.

على سبيل المثال:

  • "يوجد بالضبط مشتبه بهما اثنان في الصف 3" يصبح: cell[3,0] + cell[3,1] + cell[3,2] + cell[3,3] = 2
  • "جميع المشتبه بهم في العمود A متصلون" يصبح: قيد اتصال يضمن أن خلايا المشتبه بهم في العمود A تشكل سلسلة متواصلة بدون فجوات.
  • "الصف 1 يحتوي على مشتبه بهم أكثر من العمود B" يصبح: sum(row_1) > sum(col_B)

كيف يُتحقق من التفرد

بعد تجميع مجموعة الأدلة، يسأل المولّد CP-SAT سؤالاً دقيقاً: "بالنظر إلى هذه القيود، هل يوجد أكثر من تعيين صالح واحد؟"

CP-SAT لا يجد حلاً واحداً فحسب — بل يمكنه تعداد جميع الحلول. إذا وجد المحلّل واحداً بالضبط، فاللغز صالح. إذا وجد اثنين أو أكثر، يعود المولّد إلى المرحلة 3 ويضيف دليلاً آخر.

هذا برهان رسمي، وليس أسلوباً تقريبياً. يستكشف CP-SAT فضاء الحلول بالكامل بشكل شامل. إذا قال أن هناك حلاً واحداً، فهناك حل واحد بالضبط — نقطة.

لماذا لا نستخدم القوة الغاشمة؟

شبكة 5×5 تحتوي على 25 خلية، كل منها بقيمتين محتملتين. هذا يعني 2²⁵ = 33 مليون لوحة محتملة. تجربتها جميعاً بالقوة الغاشمة بطيئة ولا تتوسع.

CP-SAT أسرع بشكل كبير بسبب نشر القيود: عندما يقول دليل "الصف 3 يحتوي على مشتبه بهما اثنين بالضبط"، يُقلص المحلّل فوراً فضاء البحث لكل خلية في الصف 3 دون فحص كل تركيبة على حدة. الأدلة المعقدة تُضاعف هذا التأثير. عملياً، يُثبت CP-SAT تفرد لغز 5×5 في أجزاء من الثانية.


ما الذي قد يحدث خطأ (وكيف نمنعه)

"ماذا لو كان دليل غامضاً؟"

كل نوع دليل له تعريف رياضي رسمي. "الجيران" تعني دائماً الخلايا المحيطة حتى 8 خلايا بما في ذلك الأقطار. "متصل" يعني دائماً سلسلة متواصلة من الخلايا المتجاورة. "بين" يعني دائماً الخلايا في نفس الصف أو العمود، باستثناء النقطتين الطرفيتين.

هذه التعريفات مُدمجة مباشرة في نموذج القيود — لا توجد خطوة تفسير لغة طبيعية حيث يمكن أن يتسلل الغموض. مرجع التفاصيل التوضيحية داخل اللعبة يُظهر للاعبين بالضبط ما يعنيه كل مصطلح مكاني.

"ماذا لو كان في المحلّل خطأ برمجي؟"

محلّل CP-SAT أداة مُختبرة جيداً ومُستخدمة على نطاق واسع يصونها فريق التحسين في Google. لكننا لا نعتمد على الثقة وحدها. كل لغز مُولَّد يُتحقق منه بشكل مستقل:

  1. محلّل آلي يحاول حل كل لغز خطوة بخطوة، محاكياً لاعباً بشرياً. إذا لم يستطع الوصول إلى حل كامل من خلال الاستنتاج المنطقي وحده، يُرفض اللغز.
  2. فحوصات سلامة التلميحات تتحقق من أن كل تلميح في التسلسل صحيح منطقياً — أن الخلية المُلمَّح إليها قابلة للاستنتاج فعلاً من الأدلة والخلايا المكشوفة سابقاً، وليس من معلومات مخفية.

"ماذا لو فاتت توليد الأدلة حالات حدّية؟"

كل نوع دليل له دالة تقييم رسمية تُختبر مقابل تكوينات ألغاز معروفة. مرحلة توليد مجموعة الأدلة تتضمن فقط الأدلة التي تُقيَّم كصحيحة على الحل الفعلي — دليل خاطئ على الحل لن يظهر أبداً في اللغز.


النتيجة

عندما تفتح لغز Griductive، هذا ما حدث مسبقاً:

  1. وُلِّد حل عشوائي.
  2. قُيّمت آلاف الأدلة المرشحة مقابله.
  3. اختيرت مجموعة فرعية مُصغَّرة وغير مكررة.
  4. محلّل رسمي أثبت أن حلاً واحداً بالضبط يستوفي تلك الأدلة.
  5. محلّل آلي تحقق بشكل مستقل من أن اللغز قابل للحل بالاستنتاج الصرف.
  6. حُسبت درجة الصعوبة ووُلّد تسلسل التلميحات.

كل لغز، كل يوم، عبر جميع أحجام الشبكات الأربعة. بدون استثناءات.

الوعد قائم: إذا كنت عالقاً، فهناك دليل لم تستخدمه بالكامل بعد. إذا ظننت أن إجابتين ممكنتان، أعد قراءة الأدلة — المنطق سيحسمها. وإذا أردت برهاناً، سيُظهر لك الرسم البياني المنطقي سلسلة الاستنتاج الدقيقة من الأدلة إلى الحل.


ما التالي: أدلة تروي قصة

حالياً، أدلة Griductive تُقرأ كعبارات منطقية دقيقة — واضحة ولا لبس فيها، لكنها صراحةً سريرية بعض الشيء. "يوجد بالضبط مشتبه بهما اثنان في الصف 3" تؤدي الغرض، لكنها لا تجعلك تشعر تماماً أنك محقق في قضية.

نعمل بنشاط على تغيير ذلك. الهدف هو تنويع كيفية التعبير عن الأدلة — نسج نكهة موضوعية مع الحفاظ على نفس الدقة المنطقية الأساسية. تخيل أدلة مرتبطة بأحداث عطلات، أو مصاغة كشهادة شاهد من مسرح جريمة محدد. بدلاً من صيغة جامدة، ستقرأ شيئاً يبدو كدليل حقيقي من تحقيق.

القيد الأساسي لم يتغير: كل دليل يجب أن يبقى متسقاً وواضحاً وقابلاً للتحقق رسمياً. المحلّل لا يهتم إن كان الدليل يبدو كنص في كتاب رياضيات أو رواية بوليسية — كل ما يهمه هو المحتوى المنطقي. هذا الفصل هو ما يجعل التعبير الأغنى ممكناً دون المساس بالصحة.

نفس الضمانات. نفس الصرامة. لكن ألغاز تبدو أقل كمعادلات وأكثر كقضايا تستحق الحل.


لا تخمين. لا حظ. مضمون رياضياً.

العب لغز اليوم ←