Eat Bit not Meat

עמוד

התגובות שלי בפורום

מוצגות 8 תגובות – 1 עד 8 (מתוך 8 סה״כ)
  • מאת
    תגובות
  • בתגובה ל: מי מספר חוויות, קודים? #80061
    Eat Bit not Meat
    משתתף

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

    אשמח לשמוע ממי שהיה איך היה, מי זכה ומה הקודים שהשתתפו.

    בתגובה ל: הטיפ היומי 3 – מבחר שורדים לשימוש חופשי #80049
    Eat Bit not Meat
    משתתף

    כותרת: הטיפ היומי 4 – שורדים ניידים ולוכדים
    טיפ נוסף ברצף והפעם קודים לשורדים בעלי יכולות ניידות, שיכפול ולכידה או שיעבוד של שורדים אחרים.

    TIER
    שורד זה הוא שורד פשוט ביותר – 4 פקודות בלבד, אשר יש לו יכולות ניידות ולכידה. השורד נייד, כלומר מעתיק עצמו שוב ושוב לקטעים חדשים בזכרון וממשיך לרוץ מהקטע החדש. במקרה זה הקטע שחוזר על עצמו הוא פקודה אחת בלבד שכותבת בכל פעם את הפקודה הבאה. לכן גם הקוד הוא בעל פרופיל פגיעות מינימלי של פקודה אחת בלבד, רק כתיבה לכתובת הבאה יכולה לפגוע בו. יש לו גם יכולת לכידה, או שיעבוד, של שורדים אחרים. שורד אחר שמותקף לא יפסל אלא ימשיך לרוץ על הקוד שיצר ה TIER. מכיוון ששניהם רצים באותו קצב, הם לא יפילו זה את זה. לכן שורד זה בדרך כלל לא ינצח, אלא נוטה ליצור תוצאת תיקו. אם השורדים שמולו הם בעלי כוחות שווים בקירוב, הוא ייצור בכל פעם תוצאת תיקו עם מישהו אחר (מכאן שמו), מה שיכול לתת לו את הנצחון בדירוג הסופי.
    קצב ההתקפה הישיר שלו הוא בית 1 למחזור, אבל לאחר לכידה של שורדים נוספים, הם מסייעים לו לתקוף את האחרים וקצב ההתקפה גדל עם כל שורד שנלכד ברשת. התקיפה של השורדים הלכודים תהיה לרוב קטלנית (תלוי בתוכן של AX) בניגוד לתקיפה הלוכדת של השורד עצמו. כך ניתן להגיע לקצב התקפה מעשי הגדול מהגבול התיאורטי של 2, הנובע ממגבלת השימוש בפקודות 16 ביט בלבד.

    XCHG DI,AX
    mov AL,0aah
    ADD DI,7
    stosb

    JAWS
    שורד קטלני במיוחד. גם שורד זה הוא נייד ולוכד בדומה לקודם, אבל הוא תוקף בו זמנית לשני כיוונים. את כל זה הוא מצליח לעשות בעזרת קוד פשוט אך מתוחכם, בן 6 שורות בלבד, הנותן קצב התקפה של 2 בתים למחזור + לכודים ופרופיל פגיעות ממוצע של 1.5 בתים בלבד. נראה אם תצליחו להבין כיצד הואעושה זאת (מי שמצליח מוזמן לכתוב כאן את התשובה).

    MOV DI,AX
    mov SS,DS
    xchg SP,AX
    mov Ax,0ab50h
    ADD DI,12
    stosw

    המעוניינים בכך יכולים לנסות לעשות שיפורים מסויימים לשורד זה, למשל על ידי לכידה שתגרום ללכודים לבצע משימה יעילה יותר, חלוקת משימות מסודרת בין השורד ללכודים ועל ידי דילוג על הקטעים הבטוחים שמסביב לקוד המקורי (1024 בתים מכל כיוון).
    ================================
    Eat Bit not Meat
    מוגש בחסות "אכלו ביטים ולא חיות"
    אתר מומלץ יומי: http://forums.nana.co.il/Forum/?ForumID=2162

    Eat Bit not Meat
    משתתף

    כותרת: רעיונות מצויינים
    כמה מהם דומים מאד לאלה שהצגתי ומכיוון שלא קראתי קודם את הודעתך לא נתתי לך את הקרדיט המגיע לך על כך.

    כמה הערות ותוספות:

    הגרלת מספר רנדומלי – רעיון מצויין

    כתיבה לשני הכיוונים – ראה גם בטיפ היומי 5, שורד JAWS עושה דבר דומה, בדרך יעילה יותר מבחינת קצב התקפה ופרופיל פגיעות, אבל ללא דילוגים.

    מה לכתוב – מצד אחד כתיבה של תוכן השונה מ CC יכול לבלבל ולהעסיק לשווא שורדים מסוג HUNTER (הטיפ היומי 3). אני מעריך שלזה התכוונת ב "שורד מסוג שורד". צד שני, כתיבה של תוכן שונה יכולה להקל על שורד מהסוג המוצע בסוף הטיפ היומי 5, ולהוריד את הצורך בשלב א´.
    שני השורדים הללו לא מאד יעילים כנגד שורד כללי ולכן בסופו של דבר זה כנראה לא מאד משנה. החלופה שכן יכולה לשנות היא חלופה אשר משעבדת את השורד הנלכד וגורמת לו לבצע קוד שישרת את מטרותינו.

    השורד שמשכפל את עצמו – זה זהה למעשה לשורד שכיניתי TIER ומכיוון שהעלית אותו ראשון מגיע לך כל הקרדיט עליו. אכן חכם הדבר להשתמש ב STOSW/B ולא ב MOVSW/B מכיוון שכך הפגיעות יורדת מכיוון שהקוד מועתק מרגיסטרים מוגנים. ניתן להגן באופן דומהעל קוד ארוך יותר, על ידי שימו שבמחסנית, כמו שמוצע בטיפ היומי 5.
    הערה נוספת ששכחתי לציין בטיפ היומי 4. ניתן עקרונית לכתוב בכל פעם מילה, עם STOSW וכך להתקדם מהר יותר בכתיבות, אבל התוכנית תמשיך להתקדם בית אחד בכל פעם. לכן יווצר פער גדל והולך בין הבתים שנכתבו לבתים המורצים ופרופיל הפגיעות יגדל בהתאם. ב JAWS יש פתרון שכותב בכל פעם 2 בתים עם STOSW, שמתוכן רק בית אחד הוא פקודת STOSW נוספת להמשך שכפול הקוד והשנייה מנוצלת לכתיבה למקום שונה בזכרון (כיצד?)

    שורד שסורק אחר שורדים אחרים – דומה ל HUNTER מהטיחפ היומי 3, אולי אפילו יעיל יותר ושוב מגיע לך על כך הקרדיט.

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

    ================================
    Eat Bit not Meat
    מוגש בחסות "אכלו ביטים ולא חיות"
    אתר מומלץ יומי: http://www.animal.org.il

    בתגובה ל: שאלה (אם היא אפשרית לגבי התחרות + איך מבצעים!) #80047
    Eat Bit not Meat
    משתתף

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

    ================================
    Eat Bit not Meat
    מוגש בחסות "אכלו ביטים ולא חיות"
    אתר מומלץ יומי: http://www.veg.co.il

    בתגובה ל: האם מישהו הצליח לנצח את שוטר ??? #80046
    Eat Bit not Meat
    משתתף

    כותרת: 84-16 מספיק?
    זה מה שקיבלתי עם ה JAWS שהקוד שלו נתון בטיפ היומי 4. מדובר בקרב 1 על 1, והתוצאה לטובת JAWS כמובן. אני מעריך שגם ה REPEATER מהטיפ היומי 2 יתן תוצאות דומות (מישהו ניסה?)

    ה MAG מהטיפ היומי 3 מנצח 65-35 את השוטר.

    ================================
    Eat Bit not Meat
    מוגש בחסות "אכלו ביטים ולא חיות"
    אתר מומלץ יומי: http://forums.nana.co.il/kitchen

    בתגובה ל: הטיפ היומי 3 – מבחר שורדים לשימוש חופשי #80045
    Eat Bit not Meat
    משתתף

    כותרת: הטיפ היומי 5 – עוד כמה רעיונות
    לסיום, הנה עוד כמה רעיונות:

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

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

    3. רק בשביל הכיף – נסו לכתוב שורד שמצייר או כותב הודעות על פני המסך.

    4. לא רק בשביל הכיף – ניתן להשתמש בשורד המצייר או כותב על המסך לצורך Debugging, כך שיכתוב נתונים שונים למעקב.

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

    6. שורד כמו השוטר ניתן לחסל בקלות תוך זמן קצר יחסית, מתוך ידיעת דרך פעולתו. השיטה היא זו:
    שלב א: כל 256 בתים כותבים לזכרון ערך ידוע, שונה מ CC. חוזרים על כך 256 פעמים ובכך מכסים את כל הזכרון (להזהר מדריסה עצמית).
    שלב ב´: קוראים באותו סדר את הבתים שנכתבו, עד שמזהים בית ששונה ל CC. יתכן שיהיה צורך במעט יותר מלולאה אחת, אבל לא הרבה יותר. ניתן לראות כי בדרך זו מובטח לעלות על כתיבה אחת לפחות של השוטר.
    שלב ג´: כעת חוזרים אחורה ומבצעים כתיבות במרווחים של 11 בתים, כמו השוטר. את הכתיבות עושים בOFFSET, כמה בתים מהבית שמצאנו, כך שהכתיבות ידרסו את הקוד של השוטר כשנגיע אליו.
    בהתאם לזמן שבו מצאנו את הבית,ניתן לחשב בקיוב את הזמן שבו השוטר ביקר במקום ולהגבילו בהתאם לזמן שחלף בין הכתיבה שלנו לקריאת הבית שהשתנה. לכן ניתן לדלג ישר על קטע גדול ולהתחיל לכתוב באותו קטע חשוד.

    אלגוריתם זה מחסל בוודאות את השוטר תוך בערך 3000 מחזורים שבהם השוטר מבצע 1000 כתיבות בדילוגים של 11 בתים, כלומר מכסה 11000 בתים מתוך 64K, בערך 1/6. זה נותן לשוטר סיכוי של בערך 1/6 לנצח וסיכוי של 5/6 להפסיד (בקרב 1 על 1).

    החסרון הוא שמדובר בשורד ייעודי שדורש הכרה מדוייקת של היריב ואינו תוקף ביעילות כמה יריבים בו זמנית.
    ================================
    Eat Bit not Meat
    מוגש בחסות "אכלו ביטים ולא חיות"
    אתר מומלץ יומי: http://www.isav.org.il

    Eat Bit not Meat
    משתתף

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

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

    ================================
    Eat Bit not Meat
    מוגש בחסות "אכלו ביטים ולא חיות"
    אתר מומלץ יומי: http://www.animal.org.il

    בתגובה ל: מישהו יכול להביא לי קוד? #80014
    Eat Bit not Meat
    משתתף

    כותרת: שורדים לדוגמה ומדריכים
    ראה באתר הסבר איך לקמפל שורדים ואיך להריץ אותם במנוע – זה פשוט ביותר ולא דורש כל ידע מוקדם.

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

    בטיפים היומיים הבאים יובאו רעיונות ודוגמאות נוספים.

    ================================
    Eat Bit not Meat
    מוגש בחסות "אכלו ביטים ולא חיות"
    אתר מומלץ יומי: http://www.animal.org.il

מוצגות 8 תגובות – 1 עד 8 (מתוך 8 סה״כ)