דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. איקס עיגול|בדיקה האם יש מנצח|js

איקס עיגול|בדיקה האם יש מנצח|js

מתוזמן נעוץ נעול הועבר תכנות
12 פוסטים 5 כותבים 436 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • dovidD מנותק
    dovidD מנותק
    dovid ניהול
    השיב לdovid ב נערך לאחרונה על ידי
    #3

    הקוד שלי שגוי, כי בcompareLine(arr) אני מעביר מערך שנראה ככה: [0,1,2] שזה סתם מספרים ולא אלמנט שאפשר לבדוק את הvalue שלו.
    לכן צריך לתקן את הקוד ככה:

    function checkRuls(array){
         const listWin = [ 
                [0,1,2], [3,4,5], [6,7,8], //rows
                [0,3,6], [1,4,7], [2,5,8], //cols
                [0,4,8], [2,4,6]  //alachsonim 
         ];
    
         for(arr of listWin) {
             const elArr = [allData[arr[0]], allData[arr[1]], allData[arr[2]]];
             if(compareLine(arr)) {
                    console.log(`winner ${arr[0].value} by ${arr}");
                    return true;
             }
         }
    }
    

    אפשר לעשות את זה אלגנטית עם map שבעצם ממיר כל איבר במערך לאיבר אחר רצוי:

    function checkRuls(array){
         const listWin = [ 
                [0,1,2], [3,4,5], [6,7,8], //rows
                [0,3,6], [1,4,7], [2,5,8], //cols
                [0,4,8], [2,4,6]  //alachsonim 
         ];
         for(arr of listWin)
             if(compareLine(arr.map(x => allData[x]))) {
                    console.log(`winner ${arr[0].value} by ${arr}");
                    return true;
             }
    }
    

    מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

    בכל נושא אפשר ליצור קשר dovid@tchumim.com

    תגובה 1 תגובה אחרונה
    3
    • dovidD dovid התייחס לנושא זה ב
    • צבי-שצ מחובר
      צבי-שצ מחובר
      צבי-ש
      השיב לdovid ב נערך לאחרונה על ידי צבי-ש
      #4

      @dovid
      תודה רבה על המענה המפורט,

      כאן כתבת

      @dovid כתב באיקס עיגול|בדיקה האם יש מנצח|js:

      if (allData[1].value === allData[1].value == allData[2].value) {

      השוואה אחת עם 2 = ואחת עם 3 =

      בדקתי באמת ורק ככה זה עובד,
      עריכה: זה גם לא עובד, הפתרון הוא כדלקמן, לעשות פשוט שתי השוואות שונות
      אבל אשמח אם תוכל להסביר יותר למה זה לא השוואה שווה אלא אחד == ואחד === ?
      ולמה אם אני משווה === בין 3 ערכים שווים יוצא false?

      כיף לגלות דברים חדשים.
      חוק ה-50-50-90: בכל פעם שיש סיכוי של 50-50 שמשהו יעבוד, יש סיכוי של 90 אחוז שהוא לא. מקור

      dovidD תגובה 1 תגובה אחרונה
      1
      • dovidD מנותק
        dovidD מנותק
        dovid ניהול
        השיב לצבי-ש ב נערך לאחרונה על ידי dovid
        #5

        @צבי-ש טעות כתיב שלי.
        אני תמיד כותב == בגלל הרגל מC#, בJS יש כאלה שמטיפים להשתמש תמיד בשלוש כי זה חוסך השוואות לא נכונות של טיפוסים "דומים" כמו "123" == 123.

        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

        בכל נושא אפשר ליצור קשר dovid@tchumim.com

        צדיק תמיםצ תגובה 1 תגובה אחרונה
        0
        • צדיק תמיםצ מנותק
          צדיק תמיםצ מנותק
          צדיק תמים
          השיב לdovid ב נערך לאחרונה על ידי צדיק תמים
          #6

          @dovid מה שצבי כתב זה שמה שכתבת עובד רק עם == ולא עם ===:
          88ba3efe-1255-4141-b31a-231990efa322-CleanShot 2023-02-23 at 15.03.13@2x.png
          למה באמת?

          Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
          טיפים

          dovidD תגובה 1 תגובה אחרונה
          1
          • dovidD מנותק
            dovidD מנותק
            dovid ניהול
            השיב לצדיק תמים ב נערך לאחרונה על ידי dovid
            #7

            @צדיק-תמים כי השוואה האחרונה היא מול תוצאת ההשוואה שקדמה לה.
            ההשוואה הראשונה מחזירה true, וtrue !== 1.

            מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

            בכל נושא אפשר ליצור קשר dovid@tchumim.com

            צבי-שצ תגובה 1 תגובה אחרונה
            5
            • צבי-שצ מחובר
              צבי-שצ מחובר
              צבי-ש
              השיב לdovid ב נערך לאחרונה על ידי צבי-ש
              #8

              @dovid כתב באיקס עיגול|בדיקה האם יש מנצח|js:

              @צדיק-תמים כי השוואה האחרונה היא מול תוצאת ההשוואה שקדמה לה.
              ההשוואה הראשונה מחזירה true, וtrue !== 1.

              אז בעצם איך לעשות את התנאי?
              אם אני רוצה להשוואת בין 3 דברים?
              אני משווה רק בין שתיים?
              או שיש דרך בין 3 גם?
              כי אם כשאני משווה בין 3 ככה

              a === b
              

              יוצא true
              ואז אני ממשיך ומשלים ל

              a === b == c
              

              אז אני בעצם משווה בין true לc
              ואמור לצאת false , רק בגלל ששמתי == זה סתם ענה לי true,
              כלומר אין לי דרך להשוואת בין 3 ערכים מלבד לעשות

              a === b & b === c
              

              אני צודק?
              או שפיספסתי משהו?

              כיף לגלות דברים חדשים.
              חוק ה-50-50-90: בכל פעם שיש סיכוי של 50-50 שמשהו יעבוד, יש סיכוי של 90 אחוז שהוא לא. מקור

              dovidD תגובה 1 תגובה אחרונה
              3
              • dovidD מנותק
                dovidD מנותק
                dovid ניהול
                השיב לצבי-ש ב נערך לאחרונה על ידי dovid
                #9

                @צבי-ש כתב באיקס עיגול|בדיקה האם יש מנצח|js:

                ואמור לצאת false , רק בגלל ששמתי == זה סתם ענה לי true,

                זה לא סתם ענה לך, זה ענה לך true בגלל שבJS (כמו בC) אז 1 == true.
                ניצלתי את זה לצרכים שלנו.
                אם מדובר בהשוואה אחרת שאינה כוללת רק 1 0 כמו פה, כלומר 2 == 2 == 2 זה אכן לא יעבוד, וחייבים לעשות && ולכפול את ההשוואה.

                נ.ב. שים לב להשתמש ב&& במקום ב& למרות שנראה שגם השני עובד.
                & בודד זה Bitwise AND וזה גם יקר יותר בביצועים וגם יכול להביא תוצאות שגויות (למשל 2 & 1 יחזיר 0 במקום 1)
                אם הנושא הזה (או נושא אחר 🙂 ) מעניין אותך פתח נושא ייעודי.

                מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                בכל נושא אפשר ליצור קשר dovid@tchumim.com

                dovidD תגובה 1 תגובה אחרונה
                2
                • dovidD מנותק
                  dovidD מנותק
                  dovid ניהול
                  השיב לdovid ב נערך לאחרונה על ידי
                  #10

                  פתאום אני קולט שזה לא עבד לך... חשבתי שvalue זה true\false...
                  מה זה מכיל? אם זה מכיל טקסט כמו X או O, אז אכן אתה חייב שני השוואות.

                  מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                  בכל נושא אפשר ליצור קשר dovid@tchumim.com

                  צבי-שצ תגובה 1 תגובה אחרונה
                  2
                  • צבי-שצ מחובר
                    צבי-שצ מחובר
                    צבי-ש
                    השיב לdovid ב נערך לאחרונה על ידי
                    #11

                    @dovid כתב באיקס עיגול|בדיקה האם יש מנצח|js:

                    פתאום אני קולט שזה לא עבד לך... חשבתי שvalue זה true\false...

                    לא, זה אכן טקסט, ולכן לא הבנתי ..

                    כיף לגלות דברים חדשים.
                    חוק ה-50-50-90: בכל פעם שיש סיכוי של 50-50 שמשהו יעבוד, יש סיכוי של 90 אחוז שהוא לא. מקור

                    Y.Excel.AccessY תגובה 1 תגובה אחרונה
                    1
                    • Y.Excel.AccessY מנותק
                      Y.Excel.AccessY מנותק
                      Y.Excel.Access
                      השיב לצבי-ש ב נערך לאחרונה על ידי Y.Excel.Access
                      #12

                      @צבי-ש נשמח לראות את התוצאה אחרי שתגמור לקודד ולעצב וכו':)

                      Y.Excel.Access @ gmail.com

                      תגובה 1 תגובה אחרונה
                      1

                      בא תתחבר לדף היומי!
                      • התחברות

                      • אין לך חשבון עדיין? הרשמה

                      • התחברו או הירשמו כדי לחפש.
                      • פוסט ראשון
                        פוסט אחרון
                      0
                      • דף הבית
                      • קטגוריות
                      • פוסטים אחרונים
                      • משתמשים
                      • חיפוש
                      • חוקי הפורום