1. Лучший говнокод

    В номинации:
    За время:
  2. PHP / Говнокод #6752

    +160

    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
    $month = explode(".",$arResult['voting']['DATE_CREATE']);
      $day = $month['0'];
      $yarh = $month['2'];
      $month = $month['1'];
      switch ($month) {
        case 01:
            $monthtext = "января";
            break;
        case 02:
            $monthtext = "февраля";
            break;
        case 03:
            $monthtext = "марта";
            break;
        case 04:
            $monthtext = "апреля";
            break;
        case 05:
            $monthtext = "мая";
            break;
        case 06:
            $monthtext = "июня";
            break;
        case 07:
            $monthtext = "июля";
            break;
        case 08:
            $monthtext = "августа";
            break;
        case 09:
            $monthtext = "сентября";
            break;
        case 10:
            $monthtext = "октября";
            break;
        case 11:
            $monthtext = "ноября";
            break;
        case 12:
            $monthtext = "декабря";
            break;
      }

    Как думаете что произойдет в августе(и последующих месяцах) с таким кодом? :-)

    P.S. $arResult['voting']['DATE_CREATE'] в формате %d.%m.%Y

    develx0, 25 Мая 2011

    Комментарии (82)
  3. Java / Говнокод #26808

    +1

    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
    import java.util.concurrent.TimeUnit;
    import java.util.regex.Pattern;
    import static java.lang.System.*;
    import static java.util.concurrent.TimeUnit.NANOSECONDS;
    
    public class Rep implements CharSequence
    {
        String str = null;
        int    len;
        char  base;
    
        public Rep(char x, int count)
        {
            this.len  = count;
            this.base = x;
        }
    
        @Override
        public int length()
        {
            return len;
        }
    
        @Override
        public char charAt(int index)
        {
            return base;
        }
    
        @Override
        public CharSequence subSequence(int beginIndex, int endIndex)
        {
            if (beginIndex < 0) {
                throw new StringIndexOutOfBoundsException(beginIndex);
            }
            if (endIndex > this.len) {
                throw new StringIndexOutOfBoundsException(endIndex);
            }
            int subLen = endIndex - beginIndex;
            if (subLen < 0) {
                throw new StringIndexOutOfBoundsException(subLen);
            }
            return ((beginIndex == 0) && (endIndex == this.len)) ? this
                    : new Rep(this.base, subLen);
        }
    
        @Override
        public String toString()
        {
            return null!=str ?  str : (this.str  = new String(new char[]{base}).repeat(len));
        }
    
        public static void main(String... args)
        {
            long ns = 0L;
            Pattern lazy   = Pattern.compile("^(11+?)\\1+$");
            Pattern greedy = Pattern.compile("^(11+?)\\1+$");
            ns=nanoTime();  lazy  .matcher(new Rep('1',100160079)).matches(); out.println( NANOSECONDS.toMillis(nanoTime()-ns));
            ns=nanoTime();  greedy.matcher(new Rep('1',100160079)).matches();out.println( NANOSECONDS.toMillis(nanoTime()-ns));
            ns=nanoTime();  greedy.matcher(new Rep('1',1165139)).matches();out.println( NANOSECONDS.toMillis(nanoTime()-ns));
    
            ns=nanoTime(); "1".repeat( 100160079 ).matches("^(11+?)\\1+$") ; out.println("Lazy String:"+ NANOSECONDS.toMillis(nanoTime()-ns));
            ns=nanoTime(); "1".repeat( 100160079 ).matches("^(11+)\\1+$") ; out.println("Greedy String:"+ NANOSECONDS.toMillis(nanoTime()-ns)); 
        }
    
    }

    Так как в «Йажа» регулярки работают не на строках, а на интерфейсе CharSequence https://docs.oracle.com/javase/8/docs/api/index.html?java/lang/CharSequence.html

    Решил что можно сделать тупую реализацию CharSequence для строк из повторяющегося символа.

    https://ideone.com/8eYFU7

    3.14159265, 16 Июля 2020

    Комментарии (81)
  4. Си / Говнокод #26801

    +2

    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
    /* meta */
    typedef struct r_anal_meta_item_t {
    	ut64 from;
    	ut64 to;
    	ut64 size;
    	int type;
    	int subtype;
    	char *str;
    	int space;
    } RAnalMetaItem;
    
    typedef struct {
    	struct r_anal_t *anal;
    	int type;
    	int rad;
    	SdbForeachCallback cb;
    	void *user;
    	int count;
    	struct r_anal_type_function_t *fcn;
    } RAnalMetaUserItem;
    
    typedef struct r_anal_range_t {
    	ut64 from;
    	ut64 to;
    	int bits;
    } RAnalRange;
    
    #define R_ANAL_UNMASK_TYPE(x) (x&R_ANAL_VAR_TYPE_SIZE_MASK)
    #define R_ANAL_UNMASK_SIGN(x) (((x& R_ANAL_VAR_TYPE_SIGN_MASK)>> R_ANAL_VAR_TYPE_SIGN_SHIFT)==R_ANAL_VAR_TYPE_UNSIGNED)?0:1
    
    #define R_ANAL_GET_OFFSET(x,y,z) \
    	(x && x->binb.bin && x->binb.get_offset)? \
    		x->binb.get_offset (x->binb.bin, y, z): -1
    enum {
    	R_ANAL_DATA_TYPE_NULL = 0,
    	R_ANAL_DATA_TYPE_UNKNOWN = 1,
    	R_ANAL_DATA_TYPE_STRING = 2,
    	R_ANAL_DATA_TYPE_WIDE_STRING = 3,
    	R_ANAL_DATA_TYPE_POINTER = 4,
    	R_ANAL_DATA_TYPE_NUMBER = 5,
    	R_ANAL_DATA_TYPE_INVALID = 6,
    	R_ANAL_DATA_TYPE_HEADER = 7,
    	R_ANAL_DATA_TYPE_SEQUENCE = 8,
    	R_ANAL_DATA_TYPE_PATTERN = 9,
    };
    
    // used from core/anal.c
    #define R_ANAL_ADDR_TYPE_EXEC      1
    #define R_ANAL_ADDR_TYPE_READ      1 << 1
    #define R_ANAL_ADDR_TYPE_WRITE     1 << 2
    #define R_ANAL_ADDR_TYPE_FLAG      1 << 3
    #define R_ANAL_ADDR_TYPE_FUNC      1 << 4
    #define R_ANAL_ADDR_TYPE_HEAP      1 << 5
    #define R_ANAL_ADDR_TYPE_STACK     1 << 6
    #define R_ANAL_ADDR_TYPE_REG       1 << 7
    #define R_ANAL_ADDR_TYPE_PROGRAM   1 << 8
    #define R_ANAL_ADDR_TYPE_LIBRARY   1 << 9
    #define R_ANAL_ADDR_TYPE_ASCII     1 << 10
    #define R_ANAL_ADDR_TYPE_SEQUENCE  1 << 11
    
    #define R_ANAL_ARCHINFO_MIN_OP_SIZE 0
    #define R_ANAL_ARCHINFO_MAX_OP_SIZE 1
    #define R_ANAL_ARCHINFO_ALIGN 2
    #define R_ANAL_ARCHINFO_DATA_ALIGN 4

    Как нужно называть идентификаторы.

    Источник:
    https://github.com/radareorg/radare2/

    TEH3OPHblu_nemyx, 11 Июля 2020

    Комментарии (81)
  5. PHP / Говнокод #26754

    0

    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
    /**
         * @param int $filterType
         * @return int
         */
        public static function performanceFarmerStatFilterTranslator(int $filterType): int
        {
            switch (true) {
                case 1 === $filterType:
                    return Task::TYPE_PREPARE_ACCOUNTS_BY_REQUEST;
                case 2 === $filterType:
                    return Task::TYPE_PREPARE_GOOGLE_ACCOUNTS_BY_REQUEST;
                case 3 === $filterType:
                    return Task::TYPE_PREPARE_TWITTER_ACCOUNTS_BY_REQUEST;
                case 4 === $filterType:
                    return Task::TYPE_PASSWORD_MATCHING;
                case 6 === $filterType:
                    return Task::TYPE_ACCOUNT_MARKUP;
                case 7 === $filterType:
                    return Task::TYPE_REPLACE_ACCOUNTS;
            }
    
            return 0;
        }

    FireDemonru, 15 Июня 2020

    Комментарии (81)
  6. Си / Говнокод #26384

    +1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    // https://github.com/microsoft/PQCrypto-SIDH/blob/ebd1c80a8ac35e9ca2ef9680291a8a43b95a3bfa/src/random/random.c#L22
    
    static __inline void delay(unsigned int count)
    {
        while (count--) {}
    }

    ... guess what?

    j123123, 25 Января 2020

    Комментарии (81)
  7. Java / Говнокод #25348

    +1

    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
    when {
                    (defaultCurrency != null) -> {
                        when {
                            (currenciesList == null) -> {
                                currenciesList = mutableListOf(defaultCurrency)
                            }
                            (currenciesList?.isEmpty() == true) -> {
                                currenciesList?.add(defaultCurrency)
                            }
                            else -> {
                                if (currenciesList?.contains(defaultCurrency) == false) {
                                    defaultCurrency = currenciesList?.first()
                                }
                            }
                        }
                    }
                    else -> {
                        when {
                            ((currenciesList == null) || (currenciesList?.isEmpty() == true)) -> {
                                throw IllegalArgumentException("Default currency and list of currencies from terminal configuration are empty")
                            }
                            else -> {
                                defaultCurrency = currenciesList?.first()
                            }
                        }
                    }
                }

    Интерн сражается со скобочками.

    peanutwolf, 01 Февраля 2019

    Комментарии (81)
  8. 1C / Говнокод #21834

    −47

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    Функция ОпределитьПроцентМотивации(_Заказ)
    	Если 1=2 Тогда
    		_Заказ = Документы.ЗаказПокупателя.СоздатьДокумент();
    	КонецЕсли;
    ...
    КонецФункции

    Я вот даже не знаю, отнести к какой категории говнокода это отнести.
    То ли 1С не достаточно хорошо проработала автозаполнение, то ли автор гений.

    Jet, 14 Декабря 2016

    Комментарии (81)
  9. C++ / Говнокод #17460

    +58

    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
    99. 99
    #include <fstream>
    #include <string.h>
    #include <stdlib.h>
    #include <iostream>
    typedef unsigned int uint;
    std::string sMsg;
    
    int GetShift()
    {
    	int iResult = 0;
    	for(uint i = 0; i < sMsg.size(); i++)
    	{
    		if(!isalpha(sMsg[i])) continue;
    		
    		if(isupper(sMsg[i]))
    		{
    			iResult = int(sMsg[i]) - int('A');
    			break;
    		}
    		else if(islower(sMsg[i]))
    		{
    			iResult = int(sMsg[i]) - int('a');
    			break;
    		}
    	}
    	return iResult;
    }
    
    int Pos(const char* _Str, char _Ch)
    {
    	int i = 0;
    	while(*_Str)
    	{
    		if(*_Str == _Ch)
    		{
    			return i;
    		}
    		_Str++;
    		i++;
    	}
    	return -1;
    }
    
    int main()
    {
    	std::ifstream fin("input.txt");
    	std::ofstream fout("output.txt");
    	
    	std::getline(fin, sMsg);
    	
    	int iShift = GetShift();
    	if(iShift == 0)
    	{
    		fout << sMsg;
    	}
    	else
    	{
    		char* szOriginal = (char*)malloc(100);
    		strcpy(szOriginal, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
    		char* szShift = (char*)malloc(100);
    		strcpy(szShift, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ");
    		szShift += iShift;
    		
    		char* szOriginalL = (char*)malloc(100);
    		strcpy(szOriginalL, "abcdefghijklmnopqrstuvwxyz");
    		char* szShiftL = (char*)malloc(100);
    		strcpy(szShiftL, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz");
    		szShiftL += iShift;
    		
    		for(int i = 0; i < sMsg.size(); i++)
    		{
    			if(!isalpha(sMsg[i]))	
    				fout << sMsg[i];
    			else
    			{
    				if(isupper(sMsg[i]))
    				{
    					int iPos = Pos(szShift, sMsg[i]);
    					fout << *(szOriginal + iPos);
    				}
    				else if(islower(sMsg[i]))
    				{
    					
    					int iPos = Pos(szShiftL, sMsg[i]);
    					fout << *(szOriginalL + iPos);
    				}
    			}
    		}
    		
    		free(szOriginal);
    		free(szShift);
    		free(szOriginalL);
    		free(szShiftL);
    	}
    	
    	fin.close();
    	fout.close();
    	return 0;
    }

    В рамках подготовки к прошедшей областной олимпиаде по информатике среди школьников Минской области решал задачи. Данный говнокод решение задачи про шифр цезаря (данная задача была на областной олимпиаде в 2013 - 2014 учебном году).
    Задача: расшифровать строку, которая зашифрована шифром Цезаря, так, чтобы полученная расшифровка была минимальна лексикографически.
    Зашифрованная строка находится в файле input.txt, результат надо было вывести output.txt

    Janycz, 16 Января 2015

    Комментарии (81)
  10. Java / Говнокод #17104

    +76

    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
    package ololo.cdn.util;
    
    /**
     *
     */
    public interface AnswerCodes
    {
    
        public static final int CODE_OK = 0;
        public static final int CODE_NO_AUTH = 1;
        public static final int CODE_NO_ACTION_DONE = 2;
        public static final int CODE_ERROR_PARAMETERS = 4;
        public static final int CODE_NO_RIGHTS = 8;
        public static final int CODE_NOT_UNIQ_PARENT = 16;
        public static final int CODE_NOT_EXIST_COLUMNS = 32;
    
        public static final String ANSWER_NO_AUTH = "{\"result\":\"error\",\"code\":\""  + CODE_NO_AUTH + "\"}";
        public static final String ANSWER_NO_RIGHTS = "{\"result\":\"error\",\"code\":\""  + CODE_NO_RIGHTS + "\"}";
        public static final String ANSWER_NOT_UNIQ_PARENT = "{\"result\":\"error\",\"code\":\""  + CODE_NOT_UNIQ_PARENT + "\"}";
        public static final String ANSWER_NOT_EXIST_COLUMNS = "{\"result\":\"error\",\"code\":\""  + CODE_NOT_EXIST_COLUMNS + "\"}";
    
        public static final String ANSWER_OK = "{\"result\":\"ok\",\"code\":\""  + CODE_OK + "\"}";
        public static final String ANSWER_NOTHING_DONE = "{\"result\":\"ok\",\"code\":\""  + CODE_NO_ACTION_DONE + "\"}";
    }

    taras_shs, 13 Ноября 2014

    Комментарии (81)
  11. Си / Говнокод #16041

    +118

    1. 1
    ... *sizeof(uint32_t)

    Правильно. А то вдруг кто его переопределит.

    3.14159265, 22 Мая 2014

    Комментарии (81)