בחירות במדינת הגמדים שאלה תיאורטית

אהלן :slight_smile:

עכשיו אחרי שהשבוע נגמר יש לי שאלה תיאורטית לגבי בחירות במדינת הגמדים.

אם הייתי רוצה לחשב מהן כל הקואליציות האפשריות, איך הייתי יכול לעשות את זה? - נגיד לצורך הדוגמה שאין שתי מפלגות שלא רוצות לשבת אחת עם השניה.

זאת הדרך שחשבתי עליה אבל לא הצלחתי לממש אותה עד הסוף:

  1. מוחק את המפלגה שמרכיבה את הקואליציה מהמילון.
  2. למפלגה יש 31 מנדטים אז יצרתי משתנה חדש “מספר מנדטים שצריך” שכרגע הוא שווה ל31
  3. המרה של המילון לרשימה של רשימות כדי שאוכל לרוץ על כל המפלגות שנשארו. (כל רשימה ברשימה של הרשימות מכילה את שם המפלגה ואת מספר המנדטים שלה)
  4. יצירת לולאה שתרוץ על כל המפלגות:
  • אם “מספר מנדטים שצריך” קטן מ61. אני מוסיף לו את המנדטים מהמפלגה, שומר את השם של המפלגה ומוחק את הרשימה הזאת מהרשימה של הרשימות.
  • אם “מספר מנדטים שצריך” גדול מ61 אני מדפיס את כל המפלגות שאספתי עד עכשיו.

הלוגיקה הזאת מוצאת קומבינציה אחת של קואליציה אבל לא את כולן. איך הייתי יכול לשפר את זה ולמצוא יותר קומבינציות?

תודה רבה!!

בגדול אני אישית לא מבין כל כך מה שאתה מנסה לעשות.

ביחס להגדרות התרגיל:

  • בגדול יכולהה להיות רק קואליציה אחת עבור מפלגה בהינתן מפלגות שלא רוצות לשבת איתה (כמובן אם הן כולם יחד עוברות את ה61).
  • כן היה אפשר לעשות וזה עדין היה נכון בתרגיל הזה: במקום מפלגה אחת, רשימה של מפלגות שלא מוכנות לשבת עם מפלגה נתונה.
  • בתרגיל הנתון כביכול אין סיבה שמפלגה שרוצה לשבת עם מפלגה נתונה, לא תשב איתם.
    (ולכן בתרגיל הנתון כל הקוד שלך ושל כולנו, מחזיר רק קומבינציה 1 עבור מפלגה נתונה)

יחד עם זאת: אם היינו רוצים צירופים אפשריים למפלגות היינו צריכים להגדיר פה דברים כמו:

  • מקסימום מנדטים (למשל עד עד 70 ולא יותר)
  • מקיסימום מפלגות שיכולות לשבת יחד (כלומר יכול להיות ש 4 רוצות לשבת איתך, אבל הגבילו ל2 ולכן תצטרך למצוא את כל הצירופים המתאימים.
  • נתונים נוספים על מפלגות שלא מוכנות לשבת אחת עם השניה ולא רק אם רוצים לשבת עם המפלגה שלך או לא.

(שאני אומר מפלגה שלך אני מתכוון כמובן למפלגה שעבורה אנחנו בודקים)

היי תודה על התשובה!

אנסח את השאלה שלי בצורה שונה כי נראה לי שלא הייתי ברור מספיק.

בהינתן שיש לי מספר מסויים של מפלגות שסך כל המנדטים שלהם הוא 120, איך אפשר לבדוק מהם כל הצירופים האפשריים על מנת להגיע ל61 (בהינתן שלאף מפלגה לבד אין 61).

הדרך שאני יכול לחשוב עליה זה ליצור רשימה של רשימות שתיראה ככה: [[X, 20], [Y, 15], [Z, 8]…]

כאשר X,Y,Z מייצגות שם מפלגה והמספרים זה מספרי המנדטים של כל מפלגה.

אני יכול לרוץ על הרשימה הזאת, נגיד אני במפלגה X, ליצור משתנה שהוא מספר המנדטים שצריך: 61 פחות מספר המדנטים של X שהוא 20 ואז לעבור על הרשימה לפי הסדר ולחבר מפלגות עד שהמשתנה הזה מגיע לאפס (כלומר יש61 מנדטים).

הבעיה בלוגיקה הזאת היא שאני רץ לפי הסדר של הרשימה ולכן לא מקבל את כל הצירופים האפשריים כי אם חיברתי את מפלגה X עם הבאה בתור מפלגה Y והגעתי נגיד ל61 מנדטים אני מפספס את הצירוף של מפלגה X עם מפלגה Z.

נכון שכאשר אני מתקדם עם הלוגיקה ומגיע למפלגה Z ומחשב לה את הצירופים האפשריים אני כן אכסה יותר אפשרויות אבל עדיין אני לא בטוח שאגיע לכולם (תלוי כמובן בכמה מפלגות יש).

אני לא בטוח שאני מבין עדין מה אתה מנסה לעשות.

אם אתה רוצה לבדוק אפשרויות עבור כל מפלגה - בהינתן מפלגות שלא רוצות לשבת איתה.
אז כל מה שאתה צריך לעשות זה לעבור מפלגה מפלגה ולחבר אותה עם המפלגות שכן מוכנות לשבת איתה ומוכנות לשבת אחת עם השניה. אם מספר המנדטים מעל 60 הצלחת ליצור צירוף. אם לא אז אין צירוף.

אם סתם אתה רוצה לדעת צירופים אפשריים עבור מספר מפלגות (בלי קשר למנדטים שלהם)
אז בשביל זה יש את האתגר הנ"ל:
[אתגר קשה] כל הקומבינציות שבא לבדוק קומבינציות צירופים.

כן התכוונתי למשהו כמו האתגר הקשה שפרסמת (לא ראיתי שזה פורסם).

אנסה לפתור אותו :slight_smile:

לייק 1

בהצלחה ! זה בהחלט מאתגר האתגר הזה