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

    В номинации:
    За время:
  2. Куча / Говнокод #17914

    +126

    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
    -- Алгебраический тип-сумма Масть («перечисление»).
    -- Значением типа Масть может быть одно из указанных справа
    -- (или Пики, или Трефы, или Бубны, или Червы).
    -- «Масть» здесь выступает конструктором _типа_,
    -- а «Пики», «Трефы» и т.д. — конструкторами _данных_.
    data Масть = Пики | Трефы | Бубны | Червы
      -- необязательное автоматическое выведение экземпляров классов,
      -- позволяющее преобразовывать значения в строки (функцией show из Show)
      -- и обратно (функцией read из Read), а также сравнивать их между собой
      -- (функциями классов Eq и Ord).
      deriving (Show, Read, Eq, Ord)
     
    -- Алгебраический тип-сумма Достоинство
    data Достоинство = Семёрка | Восьмёрка | Девятка | Десятка
                     | Валет | Дама | Король | Туз
      deriving (Show, Read, Eq, Ord)
     
    -- Алгебраический тип-произведение Карта («тип-кортеж»).
    -- Значения типа Карта — комбинации значений типов Достоинство и Масть,
    -- объединённые конструктором данных К.
    -- Часто имена конструктора данных и конструктора типа совпадают.
    data Карта = К Достоинство Масть
      deriving (Show, Read, Eq, Ord)
     
    -- Синоним списка значений типа Карта.
    type Рука = [Карта]
     
    -- Функция, определяющая, есть ли в руке марьяж (король и дама одной масти).
    естьМарьяж :: Рука -> Bool
    естьМарьяж карты =
       -- достаточно найти марьяж хотя бы одной масти
       any (естьМарьяжМасти) [Пики, Трефы, Бубны, Червы]
       where
         -- проверить, есть ли и дама, и король заданной масти м в руке
         естьМарьяжМасти м = (К Дама м) `elem` карты && (К Король м) `elem` карты
     
    -- примеры раздач
    рука = [ К Дама Трефы, К Семёрка Червы, К Король Трефы, К Туз Бубны ]
    рука_без_марьяжа = [ К Десятка Пики, К Король Пики, К Дама Червы ]
     
    main = do
      проверить рука
      проверить рука_без_марьяжа
      проверить [] -- пустая раздача
      where
        проверить кк = putStrLn ( (show кк) ++ " -> " ++ (show (естьМарьяж кк)) )
     
    -- Вывод:
    -- [К Дама Трефы,К Семёрка Червы,К Король Трефы,К Туз Бубны] -> True
    -- [К Десятка Пики,К Король Пики,К Дама Червы] -> False
    -- [] -> False

    Рука без макияжа

    DesmondHume, 02 Апреля 2015

    Комментарии (383)
  3. JavaScript / Говнокод #17919

    +147

    1. 1
    -

    onnanon, 02 Апреля 2015

    Комментарии (375)
  4. PHP / Говнокод #2995

    +170.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
    // для увеличения быстродействия - если проверка успешна - выходим из цикла, 
    // не проверяя остальные условия.
    do
    {
    	if (is_numeric($variable))
    	{
    		// do smth
    		break;
    	}
    			
    	if (is_null($variable))
    	{
    		// do smth
    		break;
    	}
    	
    	// еще несколько ифоф			
    
    	$variable = '\'ERROR_TYPE\'';
    			
    }
    while(false);

    прикольно конечно) но чел походу не знал про switch-case

    litrumb, 13 Апреля 2010

    Комментарии (371)
  5. Си / Говнокод #17991

    +132

    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
    struct ass {
            void (*func)(const char *, void *);
            void *data;
        } asses[] = {
            { NULL, NULL },
            /* Тут типа scanf */
            { NULL, NULL },
        };
    
        while (getopt_long_only(argc, argv, "", long_options, &option_index) != -1) {
            if (option_index < 0)
                return 1;
            struct ass *derp = &asses[option_index];
            if (derp->func != NULL)
                derp->func(optarg, derp->data);
        }

    Правим код начальника.

    codemonkey, 13 Апреля 2015

    Комментарии (370)
  6. JavaScript / Говнокод #26263

    +1

    1. 1
    https://sun1-28.userapi.com/c854224/v854224060/1a2490/7JEShAFqoEU.jpg

    Сишник половину из этого увидит логичным.
    А JS макаки без должного математического образования не знают даже, как правильно проверять на эквивалентность floating point numbers.

    OlegUP, 13 Декабря 2019

    Комментарии (367)
  7. Куча / Говнокод #25750

    0

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    Чем полностью стереть файл\каталог с NTFS? 
    Имею ввиду удалить не только сам файл\каталог, но и перезатереть его запись в каталоге?
    Хотя логично предположить, что если запись содержимого каталога сортируется, то она перезапишется.
    Содержимое каталога хранится вне MFT, записи о каталогах хранятся в ней.
    Также в NTFS есть журнал транзакций, значит надо тереть и оттуда?
    
    Я так понял, в ext3\4 обычный шреддинг тоже не поможет.

    OlegUP, 06 Августа 2019

    Комментарии (367)
  8. C++ / Говнокод #26455

    +1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    // https://habr.com/ru/post/490222/
    
    Почему мы должны сломать ABI
    
    Прежде всего, есть несколько полезных изменений в реализации стандартной библиотеки, которые можно внедрить, если нарушить текущий ABI:
    
    ...
    
    * Ускорить работу std::regex (На данный момент быстрее запустить PHP и выполнить на нем поиск по регулярному выражению, чем использовать стандартный std::regex)

    Какой багор! Именно поэтому я за PHP

    j123123, 28 Февраля 2020

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

    −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
    Немного о пропертях
    
    "Лично мне свойства не нравятся и я был бы рад, если бы в Microsoft решили убрать
    их поддержку из .NET Framework и сопутствующих языков программирования."
    
    "Я считаю, что разработчики используют свойства намного чаще, чем следовало
    бы. Достаточно внимательно изучить список различий между свойствами и поля-
    ми, чтобы понять: есть очень немного ситуаций, в которых определение свойства
    действительно полезно, удобно и не запутывает разработчика. Единственная при-
    влекательная черта свойств — упрощенный синтаксис, все остальное — недостатки,
    в числе которых потеря в производительности и читабельности кода. Если бы я
    участвовал в разработке .NET Framework и компиляторов, я бы вообще отказался от
    свойств, вместо этого я предоставил бы разработчикам полную свободу реализации
    методов GetXxx и SetXxx. Позже создатели компиляторов могли бы предоставить
    особый упрощенный синтаксис вызова этих методов, но только при условии его
    отличия от синтаксиса обращения к полям, чтобы программист четко понимал, что
    выполняется вызов метода!"
    
    Джефри Рихтер

    Срач объявляется открытым

    kegdan, 29 Апреля 2016

    Комментарии (356)
  10. JavaScript / Говнокод #13057

    +144

    1. 1
    sk = e.shiftKey?e.shiftKey:((kc == 16)?true:false);

    Кэп с нами.

    Daiver, 27 Мая 2013

    Комментарии (355)
  11. Java / Говнокод #26791

    +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
    67. 67
    68. 68
    69. 69
    70. 70
    package literatePrimes;
    
    import java.util.ArrayList;
    
    public class PrimeGenerator {
      private static int[] primes;
      private static ArrayList<Integer> multiplesOfPrimeFactors;
    
      protected static int[] generate(int n) {
        primes = new int[n];
        multiplesOfPrimeFactors = new ArrayList<Integer>();
        set2AsFirstPrime();
        checkOddNumbersForSubsequentPrimes();
        return primes;
      }
    
      private static void set2AsFirstPrime() {
        primes[0] = 2;
        multiplesOfPrimeFactors.add(2);
      }
    
      private static void checkOddNumbersForSubsequentPrimes() {
        int primeIndex = 1;
        for (int candidate = 3;
             primeIndex < primes.length;
             candidate += 2) {
          if (isPrime(candidate))
            primes[primeIndex++] = candidate;
        }
      }
    
      private static boolean isPrime(int candidate) {
        if (isLeastRelevantMultipleOfNextLargerPrimeFactor(candidate)) {
          multiplesOfPrimeFactors.add(candidate);
          return false;
        }
        return isNotMultipleOfAnyPreviousPrimeFactor(candidate);
      }
    
      private static boolean
      isLeastRelevantMultipleOfNextLargerPrimeFactor(int candidate) {
        int nextLargerPrimeFactor = primes[multiplesOfPrimeFactors.size()];
        int leastRelevantMultiple = nextLargerPrimeFactor * nextLargerPrimeFactor;
        return candidate == leastRelevantMultiple;
      }
    
      private static boolean
      isNotMultipleOfAnyPreviousPrimeFactor(int candidate) {
        for (int n = 1; n < multiplesOfPrimeFactors.size(); n++) {
          if (isMultipleOfNthPrimeFactor(candidate, n))
            return false;
        }
        return true;
      }
    
      private static boolean
      isMultipleOfNthPrimeFactor(int candidate, int n) {
       return
         candidate == smallestOddNthMultipleNotLessThanCandidate(candidate, n);
      }
    
      private static int
      smallestOddNthMultipleNotLessThanCandidate(int candidate, int n) {
        int multiple = multiplesOfPrimeFactors.get(n);
        while (multiple < candidate)
          multiple += 2 * primes[n];
        multiplesOfPrimeFactors.set(n, multiple);
        return multiple;
      }
    }

    https://habr.com/ru/post/508876/
    Вероятно, хватит рекомендовать «Чистый код»
    > Я остановлюсь на ещё одном вопиющем примере кода. Это генератор простых чисел из главы 8:

    gost, 03 Июля 2020

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