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

    +172

    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
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    96. 96
    bool ParseConfig::TestLongInt(const std::wstring _data) const
    {
      std::wstring::size_type i=0;
      bool isPositively=true;
      unsigned long int scoreMinus=0;
      std::wstring text;
      std::wstring data;
    
      if(_data.empty()) return false;
    
      text=L"-0123456789";
    
      for(i=0;i<_data.size();i++)
      {
        if(text.find(_data[i],0)==std::wstring::npos)
        {
          return false;
        }
        else
        {
          if(_data[i]==L'-') scoreMinus++;
        }
      }
    
      if(scoreMinus==1)
      {
        isPositively=false;
    
        if(_data[0]!=L'-') return false;
    
        if(_data.size()==1)
          return false;
        else if(_data.size()>11)
          return false;
    
        data=_data.substr(1,_data.size()-1);
      }
      else if(scoreMinus>1)
      {
        return false;
      }
      else
      {
        if(_data.size()>10) return false;
    
        data=_data;
      }
    
      if(data[0]>L'2')
      {
        return false;
      }
      else if(data[0]==L'2')
      {
        if(data[1]>L'1')
        {
          return false;
        }
        else if(data[1]==L'1')
        {
          if(data[2]>L'4')
          {
            return false;
          }
          else if(data[2]==L'4')
          {
            if(data[3]>L'7')
            {
              return false;
            }
            else if(data[3]==L'7')
            {
              if(data[4]>L'4')
              {
                return false;
              }
              else if(data[4]==L'4')
              {
                if(data[5]>L'8')
                {
                  return false;
                }
                else if(data[5]==L'8')
                {
                  if(data[6]>L'3')
                  {
                    return false;
                  }
                  else if(data[6]==L'3')
                  {
                    if(data[7]>L'6')
                    {
                      return false;
                    }
                    else if(data[7]==L'6')
                    {

    Чел пишет парсер 2...

    Запостил: AstonS, 20 Декабря 2010

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

    • Кажется начинаю догадываться почему максимальное вложение if = 127...
      Ответить
    • Это с ГД.ру. Проверка, что число меньше, чем махинт.
      Чел новичок в этом деле, да.
      http://www.gamedev.ru/code/forum/?id=141823
      Ответить
      • Тут мысль посетила: а ведь у него отсутствует такое важное для программирования качество как лень... Наверно, это плохо.
        Ответить
      • вот что бывает когда геймдевка садится писать парсер

        "делаю такой анализатор для игры, чтобы можно было извлекать данные из конфигурационных файлов (.cfg)."
        а ведь круто, ни у кого такого нет

        "Анализатор будет рассчитан на текст UTF-16 Little Encoding."
        sic, однако!
        Ответить
        • Что ты имеешь против игроделов?
          Ответить
          • они существуют, а мне потом в это играть...
            Ответить
            • А вы не знали? Там же китайцы за компами сидят. А их девственницы в подвале колесо крутят, как раз хватает на работу их сайта.
              Ответить
              • бояном отдаёт
                хотя если бы были трудолюбивые китайцы -- возможно и нельзя было бы вражину сквозь херово пригнанные текстуры бетонной стены увидеть...
                Ответить
        • ну чо... я знавал игроделов не знающих основы C++, Java - даже в плане синтаксиса языков. :-D
          и они как-то кодили, да. :-D
          Ответить
          • показать все, что скрытоэто ты про себя уебище?
            Ответить
          • Дык это везде так. В целом интересно сравнить игроделов и прикладников по жизни. Может, игроделы больше заморочены на скорости, а прикладники - на надёжности?
            Ответить
            • на скорости? не зная язык? нуну.
              вообще как показатель - компы все мощнее, карты все круче а игры все медленнее и медленнее.
              в шутерах правда есть мудаки дизайнеры уровней которые начинают переливающийся гламр туда хуярить вообще не думая о том что графика будет тормозить.
              ща не оптимизирует никто :(
              Ответить
              • Разве игры всё медленнее? Если говорить о ААА-проектах, то там это технически обусловлено, так что на серьёзные фирмы не надо.
                А вот то, что для сраного тетриса теперь надо качать ОГЛ 3.0 и точканет 4.0 - это да, бесит.
                Ответить
                • поиграйте в call of duty: black ops без патча, это просто ёбаный тормоз на 2-х ядерке (2Ghz)
                  Ответить
                  • угу, сложность игр возросла, кодеры остались такие же (даже хуже, ибо можно слепить на CLR в меру своих неспособностей)
                    Ответить
                    • а что, на нете игры пишут?)

                      кстати, современные игры и правда говно
                      купил движок
                      купил дизайнера с пошлым, заебавшим всех однообразным монстром в голове
                      и выпустил 1999123ю в этом году однообразную унылую говнострелялку, как две капли воды похожую на все остальные

                      толи дело игры на спеке
                      Ответить
                      • > а что, на нете игры пишут?)
                        что-то я видел, типа Caesar IV что-ли

                        > купил движок
                        ну я как бы еще раньше хотел посоветовать спиратить Havoc или Infinity, но сильно не уверен, что они сами по себе не кривые -)
                        Ответить
                      • Играй в мои игры, я делаю их под свой говноутбук с процем целка-600 мхз и видяхой "отрыжка" (ATI RAGE) с 8 мб оперативы. И всегда выпендриваюсь с игровым процессом так, что большая часть сразу плюётся.
                        Ответить
                        • давай ссфлку
                          Ответить
                          • Вбиваешь в гугл "симулятор трамвая", жмёшь 1ю ссылку.

                            Блин, забыл разлогиниться из-под этого мутанта.
                            Ответить
                            • Симулятор трамвая...
                              --
                              ...А где монтажка???
                              Ответить
                          • http://www.tarasber.narod.ru/trumgame.html
                            Ответить
                            • http://papertram.ucoz.com/
                              Ответить
                              • Я в это играл. Игра на фотках смотрится хуже, чем в реальности она есть.
                                Ответить
                                • А я в это играл: http://jbss.de/
                                  Графика никакая, зато технологично!
                                  Ответить
                                  • железнодорожные маньяки! :р
                                    Ответить
                                    • Луркоманьяк?
                                      А я ещё на parovoz.com фотки иногда смотрю. У каждой второй комментарий «Горизонт завален» на самом деле.
                                      Ответить
                • эх-х, всё время убеждаюсь, что человек идёт по пути наименьшего сопротивления (это не всегда плохо, кстати).

                  Но один чел сказал: "всегда выбирай трудный путь, на нём ты не встретишь конкурентов"
                  Ответить
                  • я бы сказал что человек плывет по течению, аки говно
                    Ответить
                    • Я бы не был так категоричен.
                      А когда человек использует готовые либы, чтобы облегчить свой труд?
                      Ответить
                      • это зависит от того -- понимает он их или не понимает.
                        Прочитайте главу "злые волшебники" из книги "программист прагматик". ))
                        Ответить
                        • Понимать достаточно предсказуемость выхода от входа. В остальном вдаваться в черный ящик себе дороже. Ну, если только не для целей изучения. То бишь превращения в белый ящик.
                          Ответить
                          • а вот на это хочется отправить к Спольски с его понятием "протекшая абстракция".
                            Любая абстракция имеет дыры, и что бы не попасть в просак, нужно понимать хотя бы на 1-2 уровня ниже, что бы эти дыры чинить. Не обязательно конечно знать микрокод своего процессора, но знать работу используемых библиотек хотя бы в общих чертах все же надо.

                            примеры факапов, вызванных пренебрежением этого правила:
                            1) мне не нужно знать sql -- за меня ORM все сделает. В итоге запросы вешают сервер
                            2) не не нужно знать, как работают сети -- за меня мой RPC все сделает: в итоге на каждое действие 25 TCP коннектов, и все висит
                            и таких примеров тысячи
                            Ответить
    • Оффтоп. А компренду разве удалили? Я чет зайти под ним не могу.
      Ответить
    • показать все, что скрытоThere was komprenda 15:29 20/12/2010
      Ответить
    • #include <iostream>
      #include <wctype.h>
      #include <vector>
      using namespace std;
      
      bool test_longint(const wstring str)
      {
      	int MAX_STR_LEN= 11;	
      	if (str.empty() || str.length() > MAX_STR_LEN) {
      		cout <<"error: str empty or value is too large." <<endl;
      		return false;
      	}
      	
      	wstring templ_str= L"2147483647";
      	
      	wstring::size_type i= (str[0] == L'-')? 1 : 0;
      	for (wstring::size_type k= i; k < str.size(); k++)
      		if (!iswdigit(str[k])) {
      			cout <<"String contains invalid character" <<endl;
      			return false;
      		}	
      	//                        012345678[9]
      	if (i==1) //-2147483648 - 2147483647
      		templ_str.replace(9,1,L"8");
      	
      	// L"2147483647" 
      	//  "xxxxx12345"
              int j= (int)(templ_str.size() - str.size());
              for (j= ((j<0)? 0 : j); i<str.size(); i++,j++) {
      		/*
      		wcout <<"str[" <<i <<"]= " <<str[i]
      		     <<" templ_str[" <<i <<"]= " <<templ_str[j] <<endl;
      		*/
      		if (str[i] > templ_str[j]) {  
      			cout <<"Value is too large" <<endl;
      			return false;
      		}
      	}
      
      	cout <<"Value OK" <<endl;
      	return true;
      }
      
      int main(void)
      {
      	vector<wstring> array(6);
      	array[0] = L"-2147483648";
      	array[1] = L"-2147483649";
      	array[2] = L"2147483647";
      	array[3] = L"2147483648";
      	array[4] = L"0";
      	array[5] = L"p%h&*$#";
      
      	cout <<"Test." <<endl;
      	for (int i = 0; i < (signed)array.size(); i++ ){
      		wcout <<"Value: " <<array[i] <<endl;
      		test_longint(array[i]);
      	}
      
      	return 0;
      }
      Ответить
      • тоже говно. практически есть два варианта: (1) игнорировать переполнения т.к. они в реальной жизни при грамотном программировании происходят крайне редко и (2) использовать библиотеки для arbitrary precision numbers (то как это делают компиляторы; например gcc использует gmp).

        как по мне, это было бы последним чем я забивал себе голову при написании парсера.
        Ответить
        • (1)в реальной жизни, при грамотном программировании, выявленные вероятности переполнения, необходимо упреждать соответствующими мерами.
          Потому что происходят они — «всплывают хвосты», в те самые моменты, когда уже переключился на другой проект, а на этот подзабыл немного...
          (2)Arbitrary-precision arithmetic — тоже вариант.
          >>как по мне,
          именно.
          Просто разные упорядоченности критериев по приоритетам.
          Например, так:
          1. Надёжность;
          2. Скорость;
          3. Универсальность;
          4 .Читабельность;
          5. Кроссплатформенность.
          Ответить
          • >> как по мне,
            > именно.
            > Просто разные упорядоченности критериев по приоритетам. Например, так:

            ты забыл номер 0 - парсер должен парсить :)

            если пишешь большой кусок кода, то сначала сделать что бы он работал.

            и читабельность к слову должна быть намного выше в списке. вероятность написания куска кода который работает и надежен и быстр, но не читабелен, близка к нулю.
            Ответить
            • >ты забыл номер 0 - парсер должен парсить :)
              а что, бывают ещё критерии для неработоспособно кода?

              >если пишешь большой кусок кода, то сначала сделать что бы он работал.
              Разные подходы:
              - «быстрые пальцы»;
              - «задумчивые лица».

              Читабельность понимаю как выработанный и устоявшийся стиль программирования.
              >и читабельность к слову должна быть намного выше в списке.
              для проектов, в которых разные куски кода, могут/будут сопровождать разные программисты - обязательно.
              Одиночные проекты, дровишки, прошивки и т.п. - не настолько существенно.

              >вероятность написания куска кода который работает и надежен и быстр, но не читабелен, близка к нулю.
              есть код, который работает и надежен и быстр, и сразу не читабелен.
              Любители «hacker code tricks» - обфускаторы во плоти.
              Кстати говоря «не читабельность », это не статическое состояние кода,
              эта мера необходимых ресурсов для понимания написанного кода.
              Ответить
    • Поклоняйтесь мне мои анальные рабы!
      Ответить

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