1. C++ / Говнокод #5974

    +167

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    float ArenaTeam::GetChanceAgainst(uint32 own_rating, uint32 enemy_rating)
    {
        // returns the chance to win against a team with the given rating, used in the rating adjustment calculation
        // ELO system
       // return 1.0f/(1.0f+exp(log(10.0f)*(float)((float)enemy_rating - (float)own_rating)/400.0f));
    	float a,b;
    
    	a = own_rating;
    	b = enemy_rating;
    
    		 if(a<1800 && b<1800) return 16;
    		 if(a>=1800 && a<2000 && b<2000 || b>=1800 && b<2000 && a<2000) return 15;
    		 if(a>=2200 && b>=2200) return 15;
    	if(a>b){
    		 if(a>=2000 && a<2100 && b>=2100 && b<2200) return 17;
    		 if(a>=2000 && a<=2100 && b>=2200) return 18;
    		 if(b>=2000 && b<2100 && a>=2200) return 9;
    		 if(a>=2000 && a<2100 && b>=2000 && b<2100) return 15;
    		 if(a>=2100 && a<2200 && b>=2100 && b<2200) return 15;
    		 if(a>=2100 && a<2200 && b>=2200) return 16;
    		 if(b>=2100 && b<2200 && a>=2200) return 11;
    		 if (a>=2000 && a<2100 && b >=1850) return 10;
    		 if (a>=2000 && a<2100 && b <=1850) return 5;
    		 if (a>=2100 && a<=2200 && b >=1950 && b <2000) return 9;
    		 if (a>=2100 && a<=2200 && b >=1900 && b <2000) return 7;
    		 if (a>=2100 && a<=2200 && b >=2000 && b <2100) return 11;
    		 if (a>=2100 && a<2200 && b <=1900 && b >=1750) return 4;
    		 if (a>=2100 && a<2200 && b <1750) return 3;
    		 if (a>=2200 && b >=1950 && b <=2000) return 4;
             if (a>=2200 && b <=1950 && b>=1800) return 2;
    		 if (a>=2200 && b <=1850) return 1;
    		 if(a>=1500 && a<1600 && b >=2200) return 31;
    		 if(a>=1500 && a<1600 && b>=2000 && b <2100) return 28;
    		 if(a>=1500 && a<1600 && b>=2100 && b<2200) return 29;
    		 if(a>=1500 && a<1600 && b>=2100 && b>2200) return 31;
    		 if (a>=1900 && a<2000 && b>=2000 && b<= 2075) return 18;
    		 if (a>=1900 && a<2000 && b>=2075 && b<= 2150) return 24;
    		 if (a>=1900 && a<2000 && b>=2150 && b<= 2200) return 25;
    		 if (a>=1900 && a<2000 && b>=2150 && b> 2200) return 27;
    		 if (a>=1800 && a<1900 && b>=2000 && b<= 2075) return 22;
    		 if (a>=1800 && a<1900 && b>=2075 && b<= 2150) return 27;
    		 if (a>=1800 && a<1900 && b>=2150 && b<= 2200) return 29;
    		 if (a>=1800 && a<1900 && b>=2150 && b> 2200) return 30;
    		 if (a>=1600 && a<1800 && b>=2000 && b<= 2075) return 22;
    		 if (a>=1600 && a<1800 && b>=2075 && b<= 2150) return 28;
    		 if (a>=1600 && a<1800 && b>=2150 && b<= 2200) return 29;
    		 if (a>=1600 && a<1800 && b>=2150 && b> 2200) return 30;
    		 if(a<1500 & b>=2000) return 31;
    	}else{
                     // same just b instead of a and a instead of b
    	}
        
    }

    New developer for wow server ;) Best part is the cast to floats at start imo

    Запостил: kerhong, 14 Марта 2011

    Комментарии (17) RSS

    • гораздо интереснее, почему вся эта простыня аффтару нравится больше, чем строка 05.
      Ответить
    • Таблица предсказаний Нострадамуса - зависимость дня от года.
      А если по теме: не понятно ярое стремление к использованию float вместо double.
      Ответить
    • оптимизация же ололо
      Ответить
    • черт, только собираюсь пройтись по поводу PHP и приматов, смотрю -- а раздел-то C++
      Ответить
    • интересно, а табличная оптимизация была бы ли тут быстрее?
      в духе

      // получение координат в массиве
      uint32 norm (uint32 enemy_rating)
      {
      return (uint32)(enemy_rating - 1500) % (2200 - 1500);
      // итого - все что за пределами координат x,y ∈ [1500;2200] будет описываться крайними столбцами-строками таблицы.
      }

      float ArenaTeam::GetChanceAgainst(uint32 own_rating, uint32 enemy_rating)
      {
      return data_arr[norm(own_rating)][norm(enemy_rating)];
      // таблица data_arr 400*400 uint8'ов.
      }

      с коэффициентами мог налажать - нужно думать, сейчас уже поздно.
      Ответить
    • Братья китайцы презирают таблицы...

      Их не смущает даже возможность смело выкинуть несколько строк (см. 15, 16-ую и тому подобные)
      Ответить
      • воистину!
        А оптимизитатор должен это просечь и вырезать невыполняющиеся ветви кода.
        Интересно как в реале GCC и MSVC на это реагируют :-)
        Ответить

    Добавить комментарий