החלטתי לא להשתתף בתחרות, אבל הינה הרעיונות שלי

עמוד

ברוכים הבאים לאתר תחרויות קודגורו! פורומים אקסטרים החלטתי לא להשתתף בתחרות, אבל הינה הרעיונות שלי

הדיון הזה מכיל 2 תגובות, ויש לו 3 משתתפים, והוא עודכן לאחרונה ע״י  Eat Bit not Meat לפני 14 שנים, 7 חודשים.

מוצגות 3 תגובות – 1 עד 3 (מתוך 3 סה״כ)
  • מאת
    תגובות
  • #77681

    אור
    משתתף

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

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

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

    -רעיון נוסף הוא שבמקום לכתוב רק לכיוון אחד של השורד, אפשר לכתוב לשתי הכיוונים (אחורה וקדימה).
    דוגמא:
    @loop:
    mov w[bx],0cdcdh
    mov w[si],0cdcdh
    sub bx,9
    add si,9
    jmp @loop

    -רעיון נוסף הוא שעדיף לכתוב פקודה לא חוקית ששונה מהפקודה שנמצאת על רוב הלוח int 3 ….
    כך אם יש שורד מסוג שורד הוא ינסה לפגוע במקומות ריקים.

    -רעיון קטן שיכול להיות שימושי תחת מצבים מסויימים הוא לאכסן חלק מקוד התוכנית באוגרים.
    דוגמא פשוטה היא להשתמש בפקודה STOSB במקום ב כדי MOVSB כדי לצור שורד שמשכפל את עצמו:
    @start:
    mov di,ax
    add di,(@end-@start)
    mov ax,0aah
    stosb
    @end:

    -שורד שסורק אחר שורדים אחרים ואז מפציץ במרוכז:
    @init:
    mov bx,ax
    add bx,1075
    @core:
    @scan:
    add bx,11
    cmp b[bx],0cch
    je @scan
    @check:
    and bx,65535
    cmp bx,ax
    jb @kill
    add ax,60
    cmp bx,ax
    sub ax,60
    jbe @core
    @kill:
    sub bx,9
    mov cx,15
    @destroy:
    mov b[bx],0cch
    add bx,2
    loop @destroy
    add bx,1000
    jmp @core
    @end:

    בשורד יש גם בדיקה שהוא לא מפציץ את עצמו.

    -עוד רעיון שניראה לי שקשה למימוש היא לחשוב על דרכים כלליות איך להתגונן מהתקפות אשר ניתן להוסיף אותן לכל שורד.
    לדוגמא הצלחתי למצוא דרך להתגונן מפני התקפה של שורד שמעתיק את עצמו כל פעם צעד אחד ע"י הפקודה stosw או movsw.
    אפשר להכין מלכודת לשורד כזה ע"י כך שמכוונים את di למקום בו השורד הותקף.
    כך שתור אחד אחרי שהשורד הותקף השורד התוקף יבצע פקודה לא חוקית ויפסיד.
    הבעיה עם הרעיון שלא הצלחתי לחשוב על דרך טובה ליישם אותו בצורה כללית ורק בתור שורד נפרד.
    @start:
    mov di,ax
    add di,(@loop-@start)
    mov si,di
    add si,(@end-@start)
    @loop:
    jmp @loop
    @end:
    גם הרעיון הזה לא גמור כי תור לאחר שהשורד שמשכפל את עצמו נפסל השורד המגן נפסל.

    מי שהרעיון האלה עזרו לו שיהנה… למרות שאני בספק כי כולם מאוד פשוטים.

    #80041

    BORN
    משתתף

    כותרת: יפה!
    בסיסיים אך יעילים!

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

    לילה טוב.

    #80048

    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

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

יש להתחבר למערכת על מנת להגיב.