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

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

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

האלגוריתם של טוגזר

מתוזמן נעוץ נעול הועבר ארכיון code613m
5 פוסטים 2 כותבים 632 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • נתנאלנ מנותק
    נתנאלנ מנותק
    נתנאל
    כתב ב נערך לאחרונה על ידי
    #1

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

    פורסם במקור בפורום CODE613 ב10/06/2017 22:26 (+03:00)

    הצטרפות לרשימת התפוצה בעניני תכנות JS , React , Node וכל מיני דברים מענינים כאן :cool:
    https://programing-tips.web.app/

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

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

      פורסם במקור בפורום CODE613 ב10/06/2017 23:04 (+03:00)

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

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

      תגובה 1 תגובה אחרונה
      0
      • נתנאלנ מנותק
        נתנאלנ מנותק
        נתנאל
        כתב ב נערך לאחרונה על ידי
        #3

        אכן כן. באמת הוא מחזיר שיש חוקיות.

        Random rnd = new Random();
                    
                    List<List<int>> arrList = new List<List<int>>();
              
                    for (int i = 0; i < 1500; i++)
                    {
                        List<int> intlist = new List<int>();
                        while (intlist.Count < 8)
                        {
                            int t = rnd.Next(1, 16);
                            if (!intlist.Contains(t))
                            {
                                intlist.Add(t);
                            }
                        }
                        arrList.Add(intlist);
        
                    }
                    int ctr = 0;
                    for (int i = 0; i < arrList.Count; i++)
                    {
                        
                        for (int j = 0; j < arrList.Count; j++)
                        {
                            if (!SeeIfListCont(arrList[i], arrList[j]))
                            {
                                ctr++;
                            } 
                        }
                    }
                    MessageBox.Show(ctr.ToString());
        
                 
                }
        
        
                public bool SeeIfListCont(List<int> f , List<int> s)
                {
                    int ctr = 0;
                    for (int i = 0; i < f.Count; i++)
                    {
                        if (s.Contains(f[i]))
                        {
                            ctr++;
                            break;
                        }
                    }
                    return ctr > 0;
        
                }
        

        פורסם במקור בפורום CODE613 ב11/06/2017 09:16 (+03:00)

        הצטרפות לרשימת התפוצה בעניני תכנות JS , React , Node וכל מיני דברים מענינים כאן :cool:
        https://programing-tips.web.app/

        תגובה 1 תגובה אחרונה
        0
        • נתנאלנ מנותק
          נתנאלנ מנותק
          נתנאל
          כתב ב נערך לאחרונה על ידי
          #4
          for (int j = 0; j < arrList.Count; j++)
                          {
                              if (!SeeIfListCont(arrList[i], arrList[j]))
                              {
                                  ctr++;
                              } 
                          }
          

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

          פורסם במקור בפורום CODE613 ב11/06/2017 11:23 (+03:00)

          הצטרפות לרשימת התפוצה בעניני תכנות JS , React , Node וכל מיני דברים מענינים כאן :cool:
          https://programing-tips.web.app/

          תגובה 1 תגובה אחרונה
          0
          • dovidD מחובר
            dovidD מחובר
            dovid ניהול
            כתב ב נערך לאחרונה על ידי
            #5

            טוב. אם יש בדיוק 16 איברים הסבירות של אי התאמה נמוכה. לכן לא ראית, ו"לא ראינו אינה ראיה".
            תשנה את זה:
            int t = rnd.Next(1, 16)
            לעד 32.

            אז יהיה הרבה אי התאמות, אבל זה לא ראיה כלל שאי אפשר לסדר שתמיד יתאים.
            בקיצור זה לא הוכחה.

            פורסם במקור בפורום CODE613 ב11/06/2017 11:53 (+03:00)

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

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

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

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

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

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