Няшная / Говнокод #20152 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 th1s, (Updated )

Комментарии (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.
            Ответить
            • то ли ты забыл выделить текст зеленым, то ли ты зеленый тролль
              Ответить
              • Я привел свою точку зрения ровно с тем же уровнем аргументации.
                Ответить
                • И ведь вроде не религиозные люди, а темы филосовского толка религии поднимаете
                  Ответить
                  • Кто тут не религиозный? Пару аутодафе этому еретику.
                    Ответить
                    • Блин, технари не должны быть религиозными. Строго взвешиваешь выбор того или иного под проект и команду. Затем как царь издаешь указ: "А теперь пишем так, иначе мерджреквесты не приму. А если код не будет попадать в продакшен репозиторий - увольнение к золотым #*%".
                      Ответить
                  • оно в скобках было, т.е. я так понимаю относилось только к K&R.
                    Ответить
                    • А вдруг у него область видимости контекста — весь пост, а не скобки (т. е. почти как у JS)?
                      Ответить
                      • Если б я знал что там такое говно как в JS то даже читать коммент не стал бы.
                        Ответить
    • > Я раньше думал что такой стиль по умолчанию в Эмаксе специально для того, чтобы новички поебались с настройкой немного.

      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 пробелов табом. Наверное, хотел байты сыкономить.
      Царский ход.
      Ответить
  • if (kokoko)
        {
        pituh();
        }


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

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

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8