"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > تلك المتعلقة برقعة الشطرنج

تلك المتعلقة برقعة الشطرنج

تم النشر بتاريخ 2024-08-27
تصفح:256

التحدي الأسبوعي 281

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

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

التحدي، الحلول الخاصة بي

المهمة 1: التحقق من اللون

مهمة

يتم إعطاؤك إحداثيات، وهي سلسلة تمثل إحداثيات مربع على رقعة الشطرنج كما هو موضح أدناه:

The one about a chess board

اكتب نصًا يُرجع صحيحًا إذا كان المربع فاتحًا، وخطأ إذا كان المربع داكنًا.

الحل الخاص بي

هذا أمر مستقيم نسبيًا. أول شيء أفعله هو التحقق من صحة الموضع المقدم (الحرف الأول هو a-h والحرف الثاني بين 1 و8).

أتحقق بعد ذلك مما إذا كان الحرف الأول هو a أو c أو e أو g وكان الرقم زوجيًا، أو كان الحرف الأول هو b أو d أو f أو h وكان الرقم فرديًا، وأرجع صحيحًا. وإلا فسيتم إرجاع خطأ.

def check_color(coords: str) -> bool:
    if not re.search('^[a-h][1-8]$', coords):
        raise ValueError('Not a valid chess coordinate!')

    if coords[0] in ('a', 'c', 'e', 'g') and int(coords[1]) % 2 == 0:
        return True
    if coords[0] in ('b', 'd', 'f', 'h') and int(coords[1]) % 2 == 1:
        return True
    return False

أمثلة

$ ./ch-1.py d3
true

$ ./ch-1.py g5
false

$ ./ch-1.py e6
true

المهمة 2: حركة الفارس

مهمة

يمكن للفارس في لعبة الشطرنج أن ينتقل من موضعه الحالي إلى أي مربع على بعد صفين أو عمودين بالإضافة إلى عمود أو صف واحد. لذلك في الرسم البياني أدناه، إذا بدأ بحرف S، فيمكنه الانتقال إلى أي من المربعات المميزة بـ E.

The one about a chess board

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

الحل الخاص بي

هذا أكثر تفصيلاً. أبدأ بالمتغيرات التالية:

  • دلتا عبارة عن مجموعات من القوائم (مصفوفة من المصفوفات في لغة بيرل) مع ثماني طرق يمكن للفارس أن يتحرك بها من موقعه الحالي.
  • الهدف هو الخلية التي نريد الوصول إليها. لهذا أقوم بتحويل الحرف الأول إلى رقم من واحد إلى 8. ويتم تخزينه كصف، والقيمة الأولى هي العمود والقيمة الثانية هي الصف.
  • النقلات هي عدد النقلات التي تم إجراؤها وتبدأ بحركة واحدة.
  • المشاهدة هي قائمة بالخلايا التي قمنا بزيارتها بالفعل.
  • الإحداثيات هي قائمة بالمناصب الحالية للفارس. يبدأ بإحداثيات البداية.
def knights_move(start_coord: str, end_coord: str) -> int:
    for coord in (start_coord, end_coord):
        if not re.search('^[a-h][1-8]$', coord):
            raise ValueError(
                f'The position {coord} is not a valid chess coordinate!')

    deltas = ([2, 1], [2, -1], [-2, 1], [-2, -1],
              [1, 2], [1, -2], [-1, 2], [-1, -2])
    coords = [convert_coord_to_list(start_coord)]
    target = convert_coord_to_list(end_coord)
    moves = 1
    seen = []

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

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

    while True:
        new_coords = []

        for coord in coords:
            for delta in deltas:
                new_pos = (coord[0]   delta[0], coord[1]   delta[1])

                if not 0 



أمثلة

$ ./ch-2.py g2 a8
4

$ ./ch-2.py g2 h2
3
بيان الافراج تم نشر هذه المقالة على: https://dev.to/simongreennet/the-one-about-a-chess-board-57mh?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3