1. Си / Говнокод #20152

    −48

    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
    97. 97
    98. 98
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <stdint.h>
    
    typedef struct
    	{
    	char current;
    	char from;
    	char to;
    	} tdsSymbDiap;
    
    uint8_t changeSymbol(tdsSymbDiap * const _pSymb, const tdsSymbDiap * const _pEnd)
    	{
    	if( (_pSymb < _pEnd) == 0 )
    		return 0;
    
    	if( ++_pSymb->current <= _pSymb->to )
    		return 0;
    
    	_pSymb->current = _pSymb->from;
    	return 1;
    	}
    
    uint8_t moveToNextSymbol(tdsSymbDiap * const _pSymb, const tdsSymbDiap * const _pEnd)
    	{
    	if( (_pSymb < _pEnd) == 0 )
    		return 1;
    
    	return moveToNextSymbol( _pSymb + 1, _pEnd ) && changeSymbol( _pSymb, _pEnd );
    	};
    
    void getWord(const tdsSymbDiap * _pSymb, const tdsSymbDiap * const _pEnd, char * _pWord)
    	{
    	while( _pSymb < _pEnd )
    		{
    		*_pWord = _pSymb->current;
    		++_pWord;
    		++_pSymb;
    		}
    	*_pWord = 0;
    	}
    
    void generateSymbols(tdsSymbDiap * _pSymb, const char *_pWord, size_t _size)
    	{
    	if( _size == 0 )
    		return;
    
    	while( _size-- )
    		{
    		if( *_pWord == '@' )
    			{
    			_pSymb->from = 'a';
    			_pSymb->to = 'z';
    			}
    		else if( *_pWord == '#' )
    			{
    			_pSymb->from = 'A';
    			_pSymb->to = 'Z';
    			}
    		else if( *_pWord == '$' )
    			{
    			_pSymb->from = '0';
    			_pSymb->to = '9';
    			}
    		else
    			{
    			_pSymb->from = *_pWord;
    			_pSymb->to = *_pWord;
    			}
    
    		_pSymb->current = _pSymb->from;
    
    		++_pSymb;
    		++_pWord;
    		}
    	}
    
    int main(void)
    	{
    	char word[  ] = "@4#2u$a#"; // @ - a..z; # - A..Z; $ - 0..9
    	const size_t wordSize = strlen(word);
    
    	if( wordSize == 0 )
    		return 1;
    
    	tdsSymbDiap *pWord = malloc( wordSize * sizeof(tdsSymbDiap) );
    	generateSymbols(pWord, word, wordSize);
    
    	do
    		{
    		getWord(pWord, pWord + wordSize, word);
    		printf("%s\n", word);
    		} while( moveToNextSymbol(pWord, pWord + wordSize) == 0 );
    
    	free(pWord);
    	return 0;
    	}

    По мотивам http://govnokod.ru/20141
    Из плюсов: можно перебирать любые диапазоны символов.
    Из минусов: нет указателей на функции; без костылей нельзя перебирать aAzZ

    Запостил: th1s, 07 Июня 2016

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

    • цепочку if-else if-else if уместнее было б заменить на switch
      тут
      	if( (_pSymb < _pEnd) == 0 )
      		return 0;
      
      	if( ++_pSymb->current <= _pSymb->to )
      		return 0;

      два условия делать необязательно, можно впихнуть под одно
      Ответить
      • if-else if-else if - согласен. В начале было просто іf-else.
        Два условия впихнуть можно, только, как по мне, не нужно. Во-первых и так оптимизирует. Во-вторых, как по мне, читаемость падает.
        Ответить
    • Я раньше думал что такой стиль по умолчанию в Эмаксе специально для того, чтобы новички поебались с настройкой немного. Еще ни разу не видел чтобы кто-то серьезно такое использовал.
      Ответить
      • Это называется "Идентация по Вайтсмиту" или "у каждого свои причуды"
        Ответить
      • ИМХО:
        <code class="cpp">
        if(statement){
        // some code
        //...
        // here
        } </code>
        мне не нравится потому, что не наглядно одно там действие в теле или несколько. Постоянно приходится смотреть в конец строки.
        <code class="cpp">
        if(statement)
        {
        // some code
        //...
        // here
        } </code>
        почти тоже что и у меня.
        П.С. в этом стиле есть плюс: когда учил питон, отступы не напрягали.
        Ответить
        • печальтка. что то я не въехал в разметку ><
          ИМХО:
          if(statement){
          // some code
          //...
          // here
          }

          мне не нравится потому, что не наглядно одно там действие в теле или несколько. Постоянно приходится смотреть в конец строки.
          if(statement)
          {
          	// some code
          	//...
          	// here
          }

          почти тоже что и у меня.
          П.С. в этом стиле есть плюс: когда учил питон, было совсем не сложно писать код, ибо форматирование совпадало.
          Ответить
          • и так не то.
            Ответить
          • вот поэтому надо (имо, K&R):
            if (statement) {
                // some code
                //...
                // here
            }

            Можешь почитать подробнее тут:
            https://en.wikipedia.org/wiki/Indent_style
            Более-менее адекватными можно считать только первые три

            п.с. напрягает неистово, что тут нельзя форматировать код через табы, только пробелы. В сериале "кремниевая долина" (очень рекоммендую, btw) (S03E06) как раз наглядно демонстрируют насколько
            Ответить
            • С табами всё правильно, табщики должны страдать. Ну и плюсую Allman-style.
              Ответить
              • то ли ты забыл выделить текст зеленым, то ли ты зеленый тролль
                Ответить
                • Я привел свою точку зрения ровно с тем же уровнем аргументации.
                  Ответить
                  • И ведь вроде не религиозные люди, а темы филосовского толка религии поднимаете
                    Ответить
                    • Кто тут не религиозный? Пару аутодафе этому еретику.
                      Ответить
                      • Блин, технари не должны быть религиозными. Строго взвешиваешь выбор того или иного под проект и команду. Затем как царь издаешь указ: "А теперь пишем так, иначе мерджреквесты не приму. А если код не будет попадать в продакшен репозиторий - увольнение к золотым #*%".
                        Ответить
                  • Я написал "имо". Это само по себе +100500 к аргументации.
                    Ответить
                    • оно в скобках было, т.е. я так понимаю относилось только к K&R.
                      Ответить
                      • А вдруг у него область видимости контекста — весь пост, а не скобки (т. е. почти как у JS)?
                        Ответить
                        • Если б я знал что там такое говно как в JS то даже читать коммент не стал бы.
                          Ответить
            • :retab, :set tabstop=4 решает всё
              Ответить
      • > Я раньше думал что такой стиль по умолчанию в Эмаксе специально для того, чтобы новички поебались с настройкой немного.

        1. емакс существует исключительно для того что бы народ с настройками поебался, а потом забил и пользовался настройками по умолчанию. и что бы жизнь малиной не казалось, настройки так же можно в мертвом языке "лисп" делать. просто песня!

        2. ты перепутал с гнутым стилем.
        Ответить
        • Ну дак достижение успехов в любом говне способствует привыканию к этому говну. Ну то есть если тебе хватило сил настроить какое-нибудь дермище (то есть ты во первых уже мотивирован успехом), то статус этого дермища невероятно возрастает, тк во вторых были затрачены недюжие усилия и человеку сложно отказаться от говна, тк иначе это практически признание перед собой, что усилия потрачены в пустую, а это травма, человек будет от неё защищаться не признанием дермища дермищем
          Ответить
          • совершенно верно

            так поступают php программисты, пользователи mysql и любители javascript
            Ответить
            • Тыж сам линуксоид. Чего на зеркало пинять то?
              Ответить
              • Во-первых я OS agnotic. Мне в целом Linux нравится больше, но и винду я тоже использую, и даже мак. Есть задачи где продукты Microsoft внезапно лучше опенсурса)

                Во-вторых php и mysql не обязательные атрибуты Linux. Тот же Python с Postgres в тыщу раз лучше, да и всякие джавы с ораклами там прекрасно живут
                Ответить
                • Посгрес поставить не многие осиливают.
                  Ответить
                  • а чем установка постргреса на линуксе отличается от установки мускуля?
                    Ответить
                    • В убунте вроде был метапакет LAMP. А для постгреса такого нет.
                      Ответить
                    • если человек уже выбрал пехопе, то поставить постгрес, набрав 1-2 команды (или понажимав под виндой некст-некст-некст) он точно не осилит
                      Ответить
          • > что усилия потрачены в пустую, а это травма, человек будет от неё защищаться не признанием дермища дермищем

            после пары другой десятков таких "травм", развивается прагматизм и похуизм.

            проблема начинается с того, что много народа верит в панацеи, и постоянно их ищет ("best IDE?" "best edtitor for developers?"). потом получает "авторитетную рекомендацию"... и начинается вот то что ты описываешь. вера в панацеи + нужда в авторитетных рекомендациях - это все можно свести (либо) к плохому образованию (либо) к человеческой натуре (== "хорошим" образованием не покорёженой).
            Ответить
            • прагматизм развивается редко

              обычно человек выбирает технологию, и свято верит что все остальные технологии -- говно, даже если он их и не видел ни разу в жизни
              Ответить
              • >обычно человек выбирает технологию, и свято верит что все остальные технологии -- говно, даже если он их и не видел ни разу в жизни

                Отличная характеристика адептов мелкософта!
                Ответить
              • бывает и наоборот, когда человек прыгает куда модно
                Ответить
      • > такой стиль по умолчанию в Эмаксе специально

        В Emacs по умолчанию GNU-style, по понятным причинам. Просто всё разъезжается из-за того, что кто-то посчитал отличной идеей заменять по умолчанию каждые N пробелов табом. Наверное, хотел байты сыкономить.
        Царский ход.
        Ответить
    • Что за BDSM-style?
      Ответить
    • Fucking Hungarians.

      Блять, отучитесь уже от этой хуиты.
      Ответить
    • if (kokoko)
          {
          pituh();
          }


      Пошел ты нахуй с таким форматированием.
      Ответить

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