في أصيل يومٍ ممطر، تجلس إلى طاولة المطبخ تلعب الورق مع جدّتك. اللعبة هي نسختها الخاصة من Camicia.
في البداية تبدو مجرد مباراة ودّية أخرى: أوراق تُلقى على الطاولة، وضحكات تتعالى حولها، وابتسامة انتصار عابرة من نونا. لكن مع استمرار اللعبة، يحدث شيء غريب. الأوراق ذاتها تظل تدور عائدة من جديد. تلعب ورقة تلو الأخرى، ومع ذلك لا تبدو النهاية قادمة أبدًا.
تبدأ تتساءل. هل ستنتهي هذه اللعبة يومًا؟ أم هل يمكن أن نواصل اللعب إلى الأبد؟
لاحقًا، وبدافع الفضول، تبحث على الإنترنت، ولدهشتك تكتشف أن ما حدث لم يكن مجرد سوء حظ. ربما صادفت أنت وجدّتك واحدة من أطول المتتاليات الممكنة! وفجأة تجد نفسك مأسورًا. ما بدأ كلعبة عابرة تحوّل إلى سعي: كم يمكن أن تدوم لعبة كهذه حقًا؟ هل يمكنك أن تجد متتالية أطول مما لعبتها على طاولة المطبخ؟ ربما حتى طويلة بما يكفي لتحقيق رقم قياسي عالمي جديد؟
وهكذا، وأنت لا تملك سوى رزمة أوراق لعب وقليلٍ من البراعة الخوارزمية، تقرّر أن تحقّق في الأمر...
في هذا التمرين، ستُحاكي لعبة شديدة الشبه بلعبة الورق الكلاسيكية Camicia. سيستقبل برنامجك التهيئة الأولية لرزمتي لاعبين، وعليه محاكاة اللعبة حتى تنتهي (أو يكتشف أنها لن تنتهي أبدًا).
مثال صغير لمباراة تنتهي.
| الجولة | اللاعب أ | اللاعب ب | الكومة | العقوبة المستحقة |
|---|---|---|---|---|
| 1 | 2 A 7 8 Q 10 | 3 4 5 6 K 9 J | - | |
| 1 | A 7 8 Q 10 | 3 4 5 6 K 9 J | 2 | - |
| 1 | A 7 8 Q 10 | 4 5 6 K 9 J | 2 3 | - |
| 1 | 7 8 Q 10 | 4 5 6 K 9 J | 2 3 A | اللاعب ب: 4 |
| 1 | 7 8 Q 10 | 5 6 K 9 J | 2 3 A 4 | اللاعب ب: 3 |
| 1 | 7 8 Q 10 | 6 K 9 J | 2 3 A 4 5 | اللاعب ب: 2 |
| 1 | 7 8 Q 10 | K 9 J | 2 3 A 4 5 6 | اللاعب ب: 1 |
| 1 | 7 8 Q 10 | 9 J | 2 3 A 4 5 6 K | اللاعب أ: 3 |
| 1 | 8 Q 10 | 9 J | 2 3 A 4 5 6 K 7 | اللاعب أ: 2 |
| 1 | Q 10 | 9 J | 2 3 A 4 5 6 K 7 8 | اللاعب أ: 1 |
| 1 | 10 | 9 J | 2 3 A 4 5 6 K 7 8 Q | اللاعب ب: 2 |
| 1 | 10 | J | 2 3 A 4 5 6 K 7 8 Q 9 | اللاعب ب: 1 |
| 1 | 10 | - | 2 3 A 4 5 6 K 7 8 Q 9 J | اللاعب أ: 1 |
| 1 | - | - | 2 3 A 4 5 6 K 7 8 Q 9 J 10 | - |
| 2 | - | 2 3 A 4 5 6 K 7 8 Q 9 J 10 | - | - |
status: "finished", cards: 13, tricks: 1
هذا مثال صغير لمباراة تدخل في حلقة.
| الجولة | اللاعب أ | اللاعب ب | الكومة | العقوبة المستحقة |
|---|---|---|---|---|
| 1 | J 2 3 | 4 J 5 | - | - |
| 1 | 2 3 | 4 J 5 | J | اللاعب ب: 1 |
| 1 | 2 3 | J 5 | J 4 | - |
| 2 | 2 3 J 4 | J 5 | - | - |
| 2 | 3 J 4 | J 5 | 2 | - |
| 2 | 3 J 4 | 5 | 2 J | اللاعب أ: 1 |
| 2 | J 4 | 5 | 2 J 3 | - |
| 3 | J 4 | 5 2 J 3 | - | - |
| 3 | J 4 | 2 J 3 | 5 | - |
| 3 | 4 | 2 J 3 | 5 J | اللاعب ب: 1 |
| 3 | 4 | J 3 | 5 J 2 | - |
| 4 | 4 5 J 2 | J 3 | - | - |
بداية الجولة 4 تطابق بداية الجولة 2. تذكّر أن قيمة البطاقات العددية لا تهم.
status: "loop", cards: 8, tricks: 3
"finished" أو "loop"
لمن يرغب في خوض تحدٍ أكثر إثارة، لا يزال البحث عن أرقام قياسية أخرى لأطول لعبة لها نهاية مفتوحًا. هناك 653,534,134,886,878,245,000 (حوالي 654 كوينتليون) احتمال، ولم نحسبها كلها بعد!
سجّل في Exercism لتتعلّم وتتقن x86-64 Assembly عبر 22 مفهومًا130 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.