תכנות - שיעור 37 24/May/2006    

הצבת מלכות בלתי מאוימות - המשך

פתרנו על הלוח את תרגילים 2 ו-3 של שעור קודם. כל תמורה של הרשימה:

lteq1.png
מתארת פתרון לצריחים. לדוגמא הרשימה:
lteq2.png

מתארת את 8 המשבצות:
lteq3.png
מספיק ששתי משבצות מתוכם נמצאות על אלכסון משותף, כדי שהפתרון (לצריחים) לא יהיה טוב למלכות. בדוגמא שכאן, למשבצות: lteq4.png יש אלכסון משותף, ולכן הדוגמא איננה פתרון למלכות. אם הפתרון טוב למלכות יש לוודא עבור כל הזוגות של המשבצות שהן אינן על אלכסון משותף.


תרגילים

  1. לסיים תרגילים קודמים.
  2. העתיקו את הפונקציה הבאה, שמשתמשת בפונקציות שכתבתם בתרגילים קודמים:
    def same_diagonal(x0, y0, x1, y1):
        same = ( same_diagonal_SW2NE(x0, y0, x1, y1) or
                 same_diagonal_SE2NW(x0, y0, x1, y1)    )
        return same
    
    וכתבו תכנית שמקבלת 4 מספרים בשורת הפקודה המתארים שתי משבצות lteq5.png ובודקת אם שתי המשבצות על אלכסון משותף על ידי קריאה לפונציה המועתקת.
  3. מתמטיקה: בהנתן 8 משבצות שונות, כמה אפשרויות יש לזוג משבצות שונות מתוכן?
    שימו לב, זוג משבצות מכיל שתי משבצות שונות ואין חשיבות לסדר ביניהן.
  4. כתבו פונקציה
    is_queens_solution(a)
    שמקבלת רשימה שהיא תמורה של המספרים lteq6.png המתארת lteq7.png משבצות (כמובן פתרון טוב לצריחים!) ומחזירה False אם יש זוג משבצות מתוכן שנמצא על אלכסון משותף, ומחזירה True אחרת - כלומר אם a מיצג פתרון טוב למלכות.
    כמובן הוסיפו תכנית בדיקה.

חזרה לעמוד האם