בגן החיות בפלורידה מסודרים כלובי החיות בשורה, הנה כמה עובדות על סדר הכלובים:
א. האריה נמצא בדיוק באמצע השורה
ב. בין הכלב לבין הקוף נמצאת חיה אחת נוספת
ג. החתול נמצא מימין לכלב צמוד אליו
ד. הפיל נמצא בין הסוס לבין הג'ירף
ה. החתול נמצא מימין לסוס (לא בהכרח צמוד אליו)
ו. בין הג'ירף לבין הכלב מפרידות 3 חיות אחרות
המשימה שלנו היא לכתוב תוכנית בפייתון שמגלה כיצד מסודרות 7 החיות (בשורה) בגן החיות בפלורידה, לפי התנאים שבסיפור.
את הפתרון צרפו כתגובה לפוסט הזה. הפותר האלגנטי ביותר יזכה בכבוד של אבירים.
בהמשך נצרף פתרון משלנו.
כתבנו רבות על הספרייה itertools ונפלאותיה, כמו על יכולתה, בעיקר כאשר לא עוסקים ברשימה ארוכה מידי, לייצר במהירות את כל האפשרויות (במקרה שלנו לסידור החיות בשורה) כאשר אין חזרה על חיה אחת פעמיים (במקרה הזה המתודה נקראת permutations). כל מה שנותר לנו לעשות הוא לבחון את קיום כל תנאי החידה ובום... יש פתרון -
import itertools zoo=["cat","dog","elefant","horse","giraffe","lion","monkey"] def check_zoo(zoo): if zoo.index("cat")-zoo.index("dog")==1: if zoo.index("giraffe")>zoo.index("elefant")>zoo.index("horse") or zoo.index("horse")>zoo.index("elefant")>zoo.index("giraffe"): if zoo.index("lion")==3: if abs(zoo.index("dog")-zoo.index("monkey"))==2: if abs(zoo.index("giraffe")-zoo.index("dog"))==4: if zoo.index("cat")>zoo.index("horse"): return True return False zoo_permutations=itertools.permutations(zoo) for line in zoo_permutations: if check_zoo(line): print(line)
הפתרון היחיד המתקבל -
('giraffe', 'elefant', 'horse', 'lion', 'dog', 'cat', 'monkey')