Skip to content

Rigged Dice

מה רוצים בתרגיל

אליס ובוב משחקים בקוביות עם שתי קוביות רגילות של 6 פאות קוביה 1 וקוביה 2.
בתחילה, לאליס יש את קוביה 1 ולבוב יש את קוביה 2.
הם משחקים משחק שמורכב מ-N סיבובים והניקוד ההתחלתי של כל אחד מהם הוא 0.
כל סיבוב אליס ובוב מגלגלים את הקוביות שלהם ומוסיפים את הערך שיצא לניקוד שלהם.
לאחר זריקה, אם הניקוד במצטבר של אליס ובוב אינם שווים, הם יחליפו את הקוביות ביניהם(למי שהיה את קוביה 1 יקבל את 2 ולהיפך).
לאחת הקוביות יש סיכויים לא הוגנים לצאת על 6 (2/7 = p כאשר מ1 עד 5 1/7 = p) והקוביה השניה הוגנת(1/6 = p).
צריך למצוא את הקוביה הלא הוגנת(ז"א הזאתי שהסיכוי שלה לצאת עם ערך יותר גבוה בסוף המשחק). אליס תמיד מתחילה עם קוביה 1

קלט

שורה ראשונה-מספר המשחקים שישוחקו(T).
שאר השורות הן כמספר המהשחקים-כמה סיבובים כל משחק והתצאות של אליס ובוב כל סיבוב.

התשובה שצריך להדפיס

צריך להדפיס את הקוביה הלא הוגנת-צריך להדפיס 1 אם הקוביה הלא הוגנת זה קוביה 1 או 2 אם הקוביה הלא הוגנת זה 2.

איך פותרים

בגלל שלקוביה הלא הוגנת יש יותר סיכוי ליפול על 6 אז היא כנראה תסיים עם הערך היותר גדול: רצים על לולאה בגודל של כמות המשחקים\ יוצרים בתוך הלולאה משתנים לכל קוביה, לתוצאה במצטבר של אליס ולתוצאה במצטבר של בוב ונשווה אותם ל 0 ועוד משתנה(rigged_dice) שאיתו אנו אמורים להחליט אצל מי איזו קוביה.\ בהתחלה rigged_dice = 1 ככה נדע שקוביה 1 אצל אליס וקוביה 2 אצל בוב, כל פעם שהתוצאות של הסיבוב לא שוות נכפיל אותו במינוס 1 ואז זה כאילו אליס ובוב החליפו ביניהם את הקוביות.

    alice_total = 0
    bob_total = 0
    die1 = 0
    die2 = 0
    rigged_dice = 1

רצים בתוך הלולאה על עוד לולאה בבגודל כמות הסיבובים.\ כל סיבוב מוסיפים למשתנים של אליס ובוב את התוצאות שיצא להם.\ אם rigged_dice = 1 אז מוסיפים למשתנה של קוביה 1 את תוצאת הסיבוב של אליס ולקוביה 2 את תוצאת הסיבוב של בוב.\ אם 1- = rigged_dice אז מוסיפים למשתנה של קוביה 1 את תוצאת הסיבוב של בוב ולקוביה 2 את תוצאת הסיבוב של אליס.

        alice_total += alice_score
        bob_total += bob_score
        if rigged_dice == 1:
            die1 += alice_score
            die2 += bob_score
        elif rigged_dice == -1:
            die1 += bob_score
            die2 += alice_score

נבדוק אם התוצאות במצטבר שוות,אם לא נכפיל במינוס 1 את rigged_dice(שזה כאילו מצביע על חילוף הקוביות בין אליס לבוב)

        if alice_total != bob_total:
            rigged_dice *= -1

בודקים איזו קוביה יותר גדולה-אם קוביה 1 מדפיסים 1 אם קוביה 2 מדספיסים 2 וזהו

    if die1 > die2:
        print(1)
    else:
        print(2)