עוד אחת....

hello007

New member
עוד אחת....

2 רובוטים צונחים על קו ישר(אינסופי) ונוחתים על המצנח שלהם. לכל רובוט יש שעון כך שבכל פולס שעון , הוא צריך לנוע. רובוט יכול לנוע צעד אחד ימינה או שמאלה. לרובוטים אין כל זכרון, ולא שומרים כל מידע על עברם. יש להם בדיקת תנאי אם הם עומדים על מצנח. כלומר if on parachute do else do לכל רובוט יש את אותה תוכנית. צריך לכתוב תוכנית(סופית) כך שהרובוטים יפגשו(יעמדו זה לצד זה)
 

selalerer

New member
לא בנתי.

לפי מה שאני הבנתי יש רק ארבע אפשרויות לעשות את התוכנה הזאת:
//option 1: if on parachute do goRight else do goLeft //option 2: //same but with goRight, goRight. //option 3: //same but with goLeft, goRight. //option 4: //same but with goLeft, goLeft.​
שלפי מיטב הבנתי אף אחד מהם לא מטפל בכל המקרים. או שלא הבנתי נכון את החידה (מה שדיי סביר).
 

hope2drive

New member
אולי הכוונה למשהו כזה?

הרעיון: לך צעד אחד שמאלה מהמצנח שלך אם אתה על מצנח - הגעת למצנח של השני - עצור וחכה שהוא יחזור אליך. אם לא - חזור למצנח שלך. לך צעד אחד ימינה. אם אתה על מצנח - הגעת למצנח של השני - עצור וחכה שהוא יחזור אליך. אם לא - חזור למצנח שלך. חזור על אותה פעולה עם שני צעדים, אח"כ עם שלושה צעדים, וכולי.
for ( i=1; true; i++ ) go i steps left if on parachute end ("stay where you are") else go 2*i steps right if on parachute end ("stay where you are") else go i steps left​
 

ברנדל

New member
האמת פתרון מגניב, אבל לא טוב

החידה לא סופרה נכון, תסתכל למטה על ניסוח החידה הנכון שלי. אתה יכול להשתמש רק בארבעת הפקודות ללא שום משתנה עזר לכן הרובוט לא יכול לספור 5 צעדים או כל סכום אחר, כי אין לו שום counter הוא לא ידע לחזור אחורה.
 

ברנדל

New member
אם כבר אתה שואל חידה, תשאל אותה

נכון.. שני רובוטים נוחתים על קו ישר אינסופי שמחולק לאין סוף מקטעים שווים. הם משאירים את המצנח שלהם על המקטע בו הם נחתו ומתחילים ללכת על פי התוכנית שהם קיבלו. פקודות התוכנית: < התקדם מקטע ימינה > התקדם מקטע שמאלה goto x עבור לשורה x של התוכנית gotop x עבור לשורה x של התוכנית רק אם אתה עומד על מצנח. יש להשתמש רק בארבעת הפקודות האלה וליצור תוכנית זהה ששניהם יקבלו, ביצוע התוכנית תביא למפגש ביניהם. הפקודות > ו < לוקחות שניה כל אחת פקודות ה goto לוקחות 0 זמן
 

hope2drive

New member
שאלה - האם יש פקודת end או stop

כלומר האם אפשר להגיד להם בשלב מסוים לעצור, או שהם חייבים לנוע כל הזמן עד שנפגשים?
 

ברנדל

New member
נעים עד שנפגשים

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

hope2drive

New member
../images/Emo13.gif תודה!

נ.ב. אני "את" ולא "אתה"
הכינוי שלי קצת מטעה.
 

hope2drive

New member
וההסבר

הרעיון הוא ששניהם יתחילו ללכת בכיוון מסוים, וברגע שאחד יגיע למצנח (של השני), אנחנו יודעים שהוא זה ש"רודף" ולכן רוצים שהוא יתקדם מהר יותר, כדי שישיג את השני. כיוון שכל צעד לוקח שנייה, הדרך היא שבהתחלה כל אחד יתקדם "שניים קדימה, אחד אחורה", וברגע שאחד מגיע למצנח הוא יעבור להתקדמות רגילה.
 

hello007

New member
באמת כל הכבוד!

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