התגובות שלי בפורום
-
מאתתגובות
-
CodeGuruמנהל בפורום
כל הקוד מפורסם, ולכן כל אחד יכול לכתוב קטע נוסף (למשל להראות את הזיכרון המוגן) ולהציע כתיקון
CodeGuruמנהל בפורוםנכון – יש שני נושאים של סדר ריצה שאפשר לתקן
- כשמריצים תריסר שורדים בקבוצות של ארבע בכל פעם – הריצה היא על פי סדר. זה גורם לשורד הראשון להשתתף בהתחלה ביותר ריצות ולכן לקבל יתרון (זמני). השורד האחרון (אלפביתית) לעומת זאת לא רץ בכלל ב-330 הריצות הראשונות מתוך 495 הריצות; מה שגורם לו ל"התקע" על אפס זמן ממושך. אמנם בסופו של דבר כל השורדים רצים בדיוק אותו מספר ריצות מול כולם, אבל סדר ריצה מקרי יתקן עיוות זמני זה
- בתוך כל אחת מהריצות השורדים מורצים על פי סדר אלפביתי. זה גרם לכל מני מתמודדים לבחור שמות שהם חשבו שיהיו ראשונים. בחירת סדר מקרי בכל פעם תפתור את הבעיה הזו.
יש לשים לב למה שעידן כתב – חשוב לשמור על כך שזוג השורדים מאותו הצוות יורצו תמיד בסדר הנכון.
שני התיקונים הם יחסית קלים
CodeGuruמנהל בפורוםהדרך הטובה ביותר להתכונן היא לפתור שאלונים של שנים קודמות.
CodeGuruמנהל בפורוםיש שני דברים שאפשר לתקן בנוגע לסדר ריצת השורדים:
- כרגע מריצים את כל הרביעיות של שורדים זה מול זה על פי הסדר: קודם ארבעת הראשונים, אח"כ שלושת הראשונים והחמישי, וכו'. בסופו של דבר כולם רצים מספר הוגן ונכון של ריצות, אבל אם נריץ בסדר מקרי זה יחסוך את התהליך בו השורד האחרון בסדר אלפביתי "נתקע" על אפס זמן רב עד שהוא מתחיל להשתתף בתחרות.
- בתוך כך ריצה, הסדר הוא אלפביתי. גם כאן אפשר לבחור סדר מקרי כלשהו ולהוריד לגמרי את כל המשחק עם שמות טילדות וכדומה.
כמו שעידן ציין, חשוב לשמור על הסדר הפנימי של זוגות השורדים.
בשני המקרים מדובר בתיקונים יחסית קלים בקוד המנוע.
CodeGuruמנהל בפורוםתחרות קודגורו אקסטרים וירטואלית – במקום להפגש במקום פיזי יחיד, כל אחד מתחבר מכל מקום (בית, בית ספר, וכו'); רואה את המסך המשותף ויכול לצ'וטט עם המשתתפים האחרים.
חשבנו לקיים את התחרות מייד לאחר הפסח 22.4, אבל היו שטענו שזה מוקדם מדי ועדיף לדחות לפסח.
מה דעתכם?CodeGuruמנהל בפורוםהזומבים לוקחים את כתובת הטעינה שלהם (זה הסוד שמי שיודע אותו יכול לחטוף אותם) ומספרים מידע עליה על פי בקשה.
כל שצריך לעשות הוא לכתוב בתא מסוים מספר – והזומבי יחשב את שארית החלוקה של כתובתו הסודית במספר דנן ויכתוב בתא הבא.
אז איך מוצאים מאוסף שאריות כזה את הסוד? משפט השאריות הסיני
ולמה הזומבי בודק לפני החלוקה שהמספר גדול מספיק? אחרת הוא יחטוף שגיאה כמו חלוקה באפס שתעיף אותו
ולמה לפני החלוקה הוא מאפס את הביט העליון? כי אחרת תוצאת החלוקה, שוב, תהיה גדולה מדי ותגלושיש לכם רעיונות לכספות אחרות?
CodeGuruמנהל בפורוםכמו שקיריל אמר – הכי פשוט לתקן את המנוע כך שיבחר סדר הרצה מקרי בכל פעם.
באותה הזדמנות אפשר גם להפוך את סדר ריצת התחרות למקרי כדי למנוע את היתרון הזמני שניתן לשמות הראשונים בכך שהם מורצים קודם; כך גם אפשר יהיה להריץ בלא חשש אלף ריצות ובכל נקודה שנעצור את הריצה היא תהיה הוגנת.מי מתנדב להרים את הכפפה ולהציע לדני תיקון למנוע?
CodeGuruמנהל בפורוםכספת היא תוכנית שמכילה בתוכה שיטה להתגבר עליה. הנה דוגמא
loop:
mov ax,[1234]
mov bx,3
mul ax
sub ax,1
jnz loop
זו תוכנית שרצה בלולאה אינסופית עד שקורה משהו (מה?) ואז היא מתאבדת (למה?)CodeGuruמנהל בפורוםהסיבה, כנראה, היא שלא משתלם להגדיל את השורד כדי לקבל אנרגיה.
פתרון אפשרי – להגדיל את התועלת באנרגיה (למשל על ידי קיצור הפקודה לשני
WAIT
במקום ארבעה) או לשנות את כיוונון ההשפעה של האנרגיה.כמו הרבה הצעות תיקון אחרות – אתם מוזמנים לתקן בקוד המנוע ולהציע לדני להכניס לגרסא הבאה.
CodeGuruמנהל בפורוםהזומבים כותבים לכתובת ידועה בזכרון את שארית כתובת הטעינה שלהם בחלוקה למספר שתתן להם בכתובת אחרת.
הפתרון להשתלטות על הזומבים הוא לבקש מהם את השאריות הללו בחלוקה לשני מספרים, ולהשתמש במשפט השאריות הסיני כדי לשחזר את כתובת הטעינה ואז להשתלט עליהם.יש עוד כמה פרטים קטנים (שנדונו בתחרות עצמה) כגון למה מאפסים את הביט החשוב ביותר בכתובת, ואיך מתגברים על כך.
CodeGuruמנהל בפורוםתודה על התזכורת – עדכנו את הזוכים באתר
http://codeguru.co.il/Xtreme/winners.htm
אם פספסנו משהו (איות של שם, בית ספר או משהו אחר) אנא ספרו לנו ונתקן.CodeGuruמנהל בפורוםכספות מתוארות בפרק שמונה במדריך
http://codeguru.co.il/Xtreme/tutorial/cgx1.pdf
אפשר להתייחס לחלק מהזומבים כסוג של כספתCodeGuruמנהל בפורוםהפקודה
WAIT
היא פקודה חוקית במעבד 8086, אבל המנוע מתייחס אליה כאל פקודה לא חוקית, אלא אם כן היא באה כרביעית פקודות רצופות.
השורד הזה מנסה להשיג עדיפות גבוהה על ידי הפעלת פקודת האנרגיה מספר פעמים רב.ראה הסבר בסעיף "טכניקות מתקדמות" באתר
http://codeguru.co.il/Xtreme/tech4.htmCodeGuruמנהל בפורוםתיקון קטן – אם אתה חוטף שורד, ז״א גורם לו להריץ קוד שלך ויבורך – חשוב שתגרום לו להתאבד בסוף, אחרת תחלקו בנקודות הניצחון.
זה לא רלוונטי לזומבים שלא מקבלים ניקוד בשום מקרהCodeGuruמנהל בפורוםהקוד הוא
WAIT
WAIT
WAIT
WAIT
WAIT
WAIT
WAIT
WAIT
WAIT
WAIT
WAIT
WAIT
PUSH ES
POP DS
LODSW
JMP AX
מה שציינת הוא דיס-אסמבלי של הבינארי שנוצר מהקוד שכתבתי
הפקודה
WAIT
היא לא חוקית, אבל ארבע פקודות
WAIT
רצופות מתפרשות כאנרגיה -
מאתתגובות