הסימולטור שלנו יכול לעזור לכם לבדוק את רשימת ההנחיות לצפרדעים
מומלץ להשתמש מהמחשב
גללו מטה בדף למעבר אל הסימולטור 👇
שיהיה בהנאה ובהצלחה!
(סימולטור גירסה 1 - מוזמנות ומוזמנים לעדכן אותנו אם מצאתם באג וננסה לתקן)
אמיר:
"ראית את החידה השבועית?
צפרדעים, שלוליות, רשימות… חשבתי שאנחנו אמורים להיות אלו שממציאים את החידות…"
מאיה:
"אז זהו, שלכבוד החידה האחרונה בתחרות, צוות החידמטיקה החליט הפעם דווקא לתת לנו משימה!
האתגר שלהם די מבריק - שתי צפרדעים צריכות להפגש ולגשר על המרחק ביניהן, אבל את זה הן צריכות לעשות כששתיהן מבצעות בדיוק את אותה רשימת הנחיות פשוטות…"
אמיר:
"מבריק או מבלבל…? או אולי בכלל יש טעות בשאלה? כי איך אפשר לפתור אותה אם אני לא יודע מה המרחק ההתחלתי ביניהן?"
מאיה:
"בהחלט, זו אחת הבעיות - אנחנו מחפשים אלגוריתם שיעבוד על כל מרחק אפשרי!"
אמיר:
"חזק! אבל רק דבר אחד קטן - מה זה אלגוריתם?"
מאיה:
"אלגוריתם הוא רשימה סופית של צעדים שאחרי שמבצעים אותה מגיעים לתוצאה שרוצים. כמו למשל במתכון… במקרה שלנו, האלגוריתם הוא רשימת ההנחיות שהצפרדעים מקבלות ואנחנו יודעים שאם הן ייפגשו (או אפילו יחלפו זו על פני זו) - הגענו לתוצאה שרצינו!"
אמיר:
"אה, וואו. זה אלגוריתם ממש קשה לפיצוח! כי נניח שהמרחק ביניהן בהתחלה הוא 100 צעדים, ומצאתי רשימת הנחיות שעובדת… אז אם הרשימה שלי לא תעבוד במקרה שהמרחק בהתחלה הוא גדול יותר מ-100 צעדים… סימן שהרשימה שהכנתי היא לא הרשימה המנצחת…?"
מאיה:
"בדיוק, זה אומר שאתה רוצה רשימת הנחיות לא ארוכה מידי, שהיא לא קשורה למרחק שיש ביניהן בהתחלה. אתה רוצה שהרשימה שלך תעבוד אפילו אם המרחק בהתחלה הוא עצום - נניח כמו אחד המספרים העצומים האלה שאתה אוהב…"
אמיר:
"רגע, אז זה אומר שהרשימה הסופית של ההנחיות שלי צריכה גם איכשהו להיות אינסופית?
איך עושים את זה בכלל??"
מאיה:
"אה, זה לא כל כך מסובך… אתה פשוט צריך לעשות משהו שיחזור שוב ושוב ושוב… כמו מעגל, או לולאה… יש לך הנחייה אחת שמאפשרת לך…"
אמיר:
"אה! שמאפשרת לי לחזור שוב ושוב ושוב… ואז זה יכול להיות אין סופי! את גאונה, מאיה! אם אני אגיד לצפרדעים ללכת צעד ימינה, ואחרי שילכו צעד אגיד להן לחזור להנחיה הקודמת, אני בעצם אסגור מעגל… סוג של. והן יקפצו ימינה לנצח!"
מאיה:
"מבריק. אבל לא מספיק. אם הן יקפצו ימינה לנצח הן עדיין לא ייפגשו. אנחנו חייבים למצוא דרך לגרום להן להתקרב."
אמיר:
"אם הן פועלות לפי אותן ההוראות, איך הן יכולות להיפגש בכלל? איך אפשר ליצור שוני בהתנהגות שלהן? רגע, עוד לא השתמשנו בהנחיה של ׳אם הגעת לשלולית של חברתך…׳ אולי זו הדרך? אוף… זה כל כך מסובך…"
מאיה:
"זו חידה באמת לא פשוטה! אבל אני מעדיפה לומר מאתגרת. לדעתי אנחנו תיכף פותרים אותה! רק לא להרים ידיים…
אני רק רוצה להזכיר לנו שאחרי שנמצא רשימת הנחיות שעובדת, נצטרך לוודא שהיא מנצחת! שזה אומר שהיא עובדת לכל מרחק התחלתי וגם שהיא הכי יעילה, אחרת סתם נבזבז קפיצות מיותרות.
לפחות לא נצטרך לדמיין את זה בראש, כי צוות החידמטיקה בנה סימולטור - אפשר להזין את ההנחיות, לבחור מרחק, ולראות אם הצפרדעים מצליחות להיפגש."
אמיר:
"אוקיי, אני לא מתייאש, רק מקטר קצת… אז אני אשתמש בסימולטור וגם אחרי שנמצא אלגוריתם עובד, אני אבדוק אם יש שינויים שיכולים להקטין עוד את מספר הקפיצות. לא רק במקרה אחד שנבדוק עליו, אלא בכל המקרים, או לפחות ברובם."
מאיה:
"מעולה! ואז נדע שרשימת ההנחיות שלנו היא המנצחת - כי היא גם חכמה ועובדת וגם יעילה!
אז נבדוק אותה על המספר המפורסם כל כך 42, ונשלח את הפתרון. רק שלא אשכח לשלוח גם את רשימת ההנחיות בנימוק…"
________________
מוזמנות ומוזמנים לפתור את החידמטיקה בתמונה המצורפת.
הסימולטור הוא רק כלי עזר. אנחנו לא מבטיחים שהוא חף מטעויות... (ט.ל.ח)
הפתרון הנכון הוא פתרון שנכון מתמטית, לא רק כזה שעובד בסימולציה - אז אל תוותרו על בדיקה ידנית!
אם תמצאו באג – תרגישו חופשי לעדכן אותנו וננסה לתקן
(אבל טעות של הסימולטור לא תקנה נקודות 😉)
החידמטיקה האחרונה בתחרות לא עשתה חיים קלים לצפרדעים 🐸🐸 – וגם לא לכם… ובכל זאת, הצלחתם לקפוץ מעל כל המכשולים.
גם מי שלא פגעו בול עשו עבודה מרשימה בעצם ההתמודדות עם חידה כזו: חיפשתם, ניסיתם, טעיתם וחשבתם – מבחינתנו זה הסיפור המשמעותי - ככה מתפתחים.
וזה הזמן למחיאות כפיים:
🏆 כל הכבוד לכל מי שהצליחו לגרום לצפרדעים להיפגש!
🏆 כל הכבוד לכל מי שמצאו רשימת הנחיות שמפגישה את הצפרדעים בלי קשר למרחק ההתחלתי ביניהן!
🏆 ומחיאות כפיים סוערות במיוחד למי שמצאו רשימת הנחיות מנצחת – כזו שתמיד מביאה למפגש, ובמינימום קפיצות!
דביר, תלמיד התוכנית בקבוצת ו׳ בירושלים, מספר כיצד ניסח לעצמו את האתגר המשמעותי (יצירת המפגש), לאילו מסקנות הגיע מניתוח השאלה, ולבסוף - כיצד התקדם צעד-צעד עד למציאת רשימה מנצחת:
"דבר ראשון ניסיתי לראות איך זה בכלל אפשרי שהן יפגשו, והבנתי שצריך להיות מתי שהוא את הפקודה "אם ביקרת בשלולית של חברתך...".
דבר שני הבנתי שאי אפשר לעשות רק קפצי ימינה או רק קפצי שמאלה כי ככה זה יהיה אין סופי.
אחרי זה הגעתי למסקנה שגם צריך להיות מתישהו 'עברי אל הנחייה מספר...' כי כנראה שאם לא יהיה זה יתקע מתישהו.
אחרון הבנתי שאם יש למשל פעם אחת תקפצי ימינה ומיד עברי אל הנחייה מספר... זה יהיה לולאה.
מסקנות:
* חייב להיות את הפקודה "אם ביקרת בשלולית של חברתך...".
* חייב שיהיה גם קפצי ימינה וגם קפצי שמאלה.
* חייב להיות את הפקודה "עברי אל הנחייה מספר...".
* חייב שלא יהיה את הפקודה קפצי ימינה וקפצי שמאלה באותה כמות של פעמים.
אחרי כל המסקנות התחלתי לגשת לעבודה האמיתית למצוא את הרשימה המנצחת. עכשיו אחרי כל המסקנות עשיתי פשוט ניסוי וטעיה ומצאתי שרשימה שעובדת על כל המרחקים:
1️⃣ קפצי ימינה 2️⃣ קפצי ימינה 3️⃣ אם ביקרת בשלולית של חברתך - עברי אל הנחייה מספר 1 4️⃣ קפצי שמאלה 5️⃣עברי אל הנחייה מספר 1
השלב הבא היה לדעת כמה פעמים צריך לקפוץ ימינה וכמה פעמים שמאלה. פשוט שמתי בסימולטור כל מני דרכים ויצא לי שהכי שווה לעשות ימינה-ימינה-ימינה-שמאלה.
נ.ב. יש לכל מספר רשימה מנצחת בשביל עצמו אבל שגם עובד לכל שאר המספרים אבל זו הרשימה שעובדת הכי טוב בממוצע לכל המספרים*. עבור 42 נקבל 328 קפיצות.
*הערת הצוות: אם לדייק, הרשימה של דביר עובדת 'הכי טוב' למרחקים התחלתיים אי-זוגיים גדולים מ-1. מבחינתנו זה בהחלט נחשב 'כמעט כל מרחק'.
_________________________
אלמוג, תלמיד התוכנית בקבוצת ו׳ בראש העין, מספר כי דרך הפתרון הראשונה שחשב עליה התבררה כבלתי אפשרית, אך לאחר חשיבה נוספת הוא מצא את העיקרון המנצח. לאחר מכן בזכות כמה בדיקות, הוא הצליח למצוא גם רשימה שתהיה יעילה במיוחד. והכי כיף בשבילינו - לקרוא על ההנאה מפיצוח האתגר!
"זאת הייתה חידה ממש מאתגרת אבל היה מאוד כיף כשהצלחנו בסוף!
נעזרתי באבא ולקח לנו הרבה זמן עד שהבנו איך לעשות את זה.
בהתחלה חשבנו להזיז את הצפרדעים בזיג-זג כל פעם צעד אחד יותר לכל כיוון, אבל הבנו שאין לנו דרך לבצע את האלגוריתם הזה למספרים גדולים.
הבנו בסוף שכדי שצפרדע אחת לא תמשיך עד אינסוף, אנחנו צריכים שהצפרדע השנייה תהיה יותר מהירה ממנה. אז דאגנו שהצפרדעים בהתחלה יתקדמו באופן איטי (למשל שני צעדים קדימה וצעד אחורה), ורק אחרי שאחת הצפרדעים תפגוש בשלולית, היא תתקדם בקצב רגיל עד שבסוף הן יפגשו.
אחרי זה נשאר לנו לחשב באיזה קצב איטי הכי משתלם להתקדם בהתחלה, כדי שיפגשו בסוף הכי מהר. בהתחלה עדיף לנו להתקדם יחסית מהר עד השלולית, אבל אז בחלק השני יקח לנו יותר זמן לתפוס את הצפרדע.
חישבנו את זה לפי כל מני מרחקים שונים וראינו שלמעט מספרים קטנים, הפתרון האופטימלי הוא לנוע בהתחלה 3 צעדים קדימה ואחד אחורה."
_________________________
נדב, תלמיד התוכנית בקבוצת ו׳ בתל אביב, רתם את המשפחה ואת ה-GPT לעזרתו. בשילוב כוחות, ויחד עם רעיון יצירתי שעלה בראשו רגע לפני השליחה - הוא הצליח להגיע אל הרשימה המנצחת, ואפילו להישאר עם שאלה מסקרנת להמשך המחקר שלו (אבל הצליח לא להתפתות, ולשלוח את התשובה בזמן לקבלת מלוא הנקודות) :
"בגלל שזו חידה אחרונה שיתפתי בה לא רק את אבא שלי אלא גם את דוד שלי ואת בת דודה שלי והם הציעו רצף כזה: 1️⃣ קפצי ימינה 2️⃣ קפצי ימינה 3️⃣ אם ביקרת בשלולית של חברתך - עברי אל הנחייה מספר 1 4️⃣ קפצי שמאלה 5️⃣עברי אל הנחייה מספר 1
הלכנו לפי הסדר הזה בעזרת הסימולטור וניסינו למצוא נוסחה שתיתן את התוצאה הרצויה אבל לא הצלחנו למצוא כזו שתתאים גם למספר זוגי וגם לאי זוגי. התיעצנו עם GPT והוא אמר שאין נוסחה כזו אז ירדנו מזה.
התכוונו לשלוח אבל אז שאלתי את אבא מה היה קורה אם היינו שמים 3 פעמים "קפצי ימינה" במקום פעמיים.
בדקנו בסימולטור וזה יצא פחות קפיצות מבפעמיים ולכן המשכנו לארבעה פעמים וזה יצא יותר מבשלוש או בשתי פעמים.
עשינו את זה גם עם מספרים אחרים אבל 3 פעמים עדיין הביא למספר הקפיצות הנמוך ביותר.
עדיין אין לנו הסבר למה 3 פעמים מביא למספר הקפיצות הנמוך ביותר אבל נמשיך לשבת על החידה עד שנבין. כבר כמעט ארבע אז אין לנו זמן גם להבין וגם לשלוח ולקבל את מלוא הנקודות. :)"
_________________________
דפנה, תלמידת התוכנית בקבוצת ז׳ בתל אביב, מתארת בפירוט ובדיוק מרשים את תהליך הפתרון שלה, ומסבירה בצורה בהירה במיוחד את המאזן שגורם דווקא לרשימה שלה להיות יעילה כל כך (למעשה - עונה על השאלה הפתוחה של נדב 👆) :
"קודם כל, הבנתי שאני חייבת להשתמש ב-'אם ביקרת בשלולית...' כי אחרת הצפרדעים תמיד יקפצו לאותו כיוון והמרחק ביניהן יישאר קבוע. הבנתי גם שאני חייבת להשתמש ב״עברי אל הנחייה מספר...״, כי היא זו שתהפוך את הרשימה למשהו אינסופי.
הדבר הראשון שחשבתי עליו, הוא ליצור איזשהו "לופ" שבו יתקעו שתי הצפרדעים, עד שאחת מהן תצא ממנו איכשהו, ותתחיל ללכת בדרך אחרת, כך שהיא תפגוש את הצפרדע השנייה.
אז בהתחלה חשבתי לתקוע אותן בתוך לופ שהולך ימינה תמיד, כך שבסופו של דבר הצפרדע השמאלית תגיע לשלולית של חברתה (והצפרדע הימנית לעולם לא תגיע לשלולית של חברתה), וכך אני בעצם אעביר אותה לשלב אחד אחרי זה שבו אמרתי לה לחזור להנחייה מספר 1 (ההנחייה שיצרה את הלופ), כך שהיא תצא מהלופ. אז עכשיו חשבתי לגרום לה ללכת שמאלה, אבל רגע, זה אומר שהיא תלך בכיוון ההפוך מהצפרדע הימנית, זה לא טוב, רק הרחקתי ביניהן עכשיו.
אז חשבתי וחשבתי עד ש.... מצאתי!
הלופ שאני אתקע אותן בו בהתחלה, פשוט יגרום להן ללכת לאט, כלומר, הן ילכו שני צעדים ימינה ואז אחד שמאלה. ברגע שהצפרדע השמאלית תגיע לשלולית של חברתה היא פשוט תעבור ללופ שיגרום לה ללכת רק ימינה, מה שאומר שהיא תלך מהר יותר עד שתעקוף את הצפרדע הימנית. בזמן העקיפה הן בעצם נפגשו.
אבל אז ניסיתי, סתם מסקרנות, לגרום להן ללכת שלושה צעדים ימינה ואז אחד שמאלה. וזה עבד יותר טוב! אז ניסיתי גם ללכת ארבעה צעדים ימינה ואז אחד שמאלה, אבל זה היה פחות טוב.
אז הבנתי את הדבר הבא: כשהלכתי שניים ימינה ואז אחד שמאלה, קפצתי 3 קפיצות בסך הכל, אבל בעצם התקדמתי רק צעד אחד. כשהלכתי שלושה ימינה ואחד שמאלה, קפצתי 4 קפיצות בסך הכל, אבל בעצם התקדמתי 2 צעדים, כלומר, התקדמתי צעד אחד על כל שתי קפיצות, שזה יותר מהר מהדרך הקודמת.
אז לדרך הראשונה, האיטית יותר (שניים ימינה ואחד שמאלה), יש יתרונות וחסרונות. בגלל שהיא מתקדמת לאט מאוד, ייקח לצפרדע השמאלית המון קפיצות להגיע לשלולית של חברתה, שזה חסרון, אבל, מרגע שהיא תגיע ותתחיל ללכת מהר, יהיה לה קל יותר לעקוף את הימנית, כי היא מתקדמת הרבה יותר לאט ממנה. אבל עדיין, החיסרון גדול מהיתרון.
כשהלכתי ארבעה ימינה ואחד שמאלה, הלכתי בקצב יותר מהיר משתי הדרכים, אבל עכשיו, אם זו הרשימה, כשהצפרדע השמאלית תנסה לעקוף את הימנית, זה ייקח לה יותר זמן כי הצפרדע הימנית מתקדמת בקצב די מהיר גם כן, אז זה פחות טוב. אז בעצם, קצב ההתקדמות המושלם הוא שלושה ימינה ואחד שמאלה.
בסוף גם הבנתי שאם אוסיף את ההנחיה "אם הגעת לשלולית של חברתך עברי להנחייה..." אחרי כל צעד ימינה או שמאלה, זה יחסוך קפיצות מיותרות. יכול לקרות מצב שבו צפרדע הגיעה לשלולית של חברתה היא תלך קודם צעד שמאלה ורק אז תצא מהלופ. זה בזבוז קפיצות. האמת היא שלי זה חסך שמונה קפיצות!"
_________________________
יפתח, תלמיד התוכנית בקבוצת ו׳ בתל אביב, הבין את העיקרון של הפתרון ויצר נוסחה שמתאימה את מספר הקפיצות הנחוץ בכל מיני דרכי פתרון שונות. בעזרת האקסל הוא חישב את מספר הקפיצות הנחוצות בדרכי פתרון שונות - וכך מצא את פתרון יעיל במיוחד:
"בכדי להפגש נצטרך ללכת לכוון אחד יותר מהשני עד שנגיע לבריכה של החבר, ומשם נוכל להתקדם בכוונו עד המפגש (הוא ימשיך מידי פעם לחזור אחורה קצת). החלטתי ללכת ימינה יותר משמאלה.
האלגוריתם שלי ילך ימינה a צעדים ואז שמאלה b צעדים. אם יגיע לשלולית של החבר ילך משם רק ימינה.
נניח שהמרחק בין השלוליות x.
עד שנגיע לשלולית החבר, בכל מהלך של צפרדע שמאל נלך a צעדים ימינה, b שמאלה, ובסך הכל a+b צעדים בהם נתקרב a-b צעדים לשלולית. יקח לנו x חלקי a-b כפול a+b צעדים להגיע לשלולית (אולי טיפה פחות אם תוך כדי ההליכה ימינה נפגוש אותה).
אחרי שהגענו לשלולית, המרחק בין הצפרדעים הוא עדיין x. צפרדע שמאל הולכת a+b צעדים ימינה, בזמן שהימנית עדיין הולכת a ימינה ואז b שמאלה. סה"כ מתקרבים 2b על כל a+b צעדים. ולסגור את המרחק יקח x חלקי 2b כפול a+b צעדים להפגש.
אבא ואני עשינו קצת אלגברה ויצא שבסה"כ אנחנו הולכים a+b בריבוע חלקי (a+b)2b כפול x. זה כל צפרדע, ביחד כפול 2 (פחות אולי קצת תלוי איפה תופס אותנו המפגש).
חיפשתי מינימום של הביטוי עבור a,b שלמים חיוביים באקסל. יש הרבה פתרונות שהם 8x אבל לא פחות. הראשון שבהם זה a=3 וכן b=1.
שאר הפתרונות כפולות של אותו פתרון. אם נשתמש בפתרון גדול מידי, אז נלך אולי סתם הרבה בשלב הראשון. מצד שני, פתרון גדול יכול לחסוך יותר צעדים (לא יותר מפעמיים a ו b).
אין בשאלה הגדרה מה עדיף ולכן בחרתי במספרים הכי קטנים, שלא נקבל תוצאות גבוהות מידי עבור מרחקים קטנים. זו לא התוצאה הכי טובה עבור המרחק 42.
עפי החישוב הכי גרוע שיצא זה 8*42=336. אבל כשהרצתי עבור מרחק 42 לראות מה בדיוק יוצא - קיבלתי 328."
_________________________