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

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

    +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
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    # это комментарий #
    COMMENT это понятно что COMMENT
    CO это тоже ко-ко-коментарий CO
    
    CO функция принимает 3 параметра типа INT и возвращает ссылку на массив CO
    PROC range = (INT start, end, step)REF[]INT : (
        INT length = ABS((end - start) % step);
        NEW [0 : length - 1]INT result; CO массив в куче CO
        CO LWB —– нижний индекс массива, UPB —– верхний CO
        FOR i FROM LWB result TO UPB result
        DO
            result[i] := start + i * step
        OD;
        result CO функции возвращают результат последнего вычесленного выражения CO
    );
    
    CO можно определять свои операторы CO
    OP RANGE = (INT start, end)REF[]INT: range(start, end, (start < end | 1 | -1));
    PRIO RANGE = 5; CO для бинарных операторов нужно задать приоритет, у сложения/вычитания приоритет = 6 CO
    
    CO для операторов возможна перегрузка по количеству и типу аргументов CO
    OP RANGE = (INT end)REF[]INT: 0 RANGE end;
    
    OP ACCUM = ([]INT x, PROC(INT,INT)INT f)INT : (
        INT length = UPB x - LWB x;
        IF length = 0 THEN
            1
        ELIF length = 1 THEN
            x[LWB x]
        ELSE
            INT result;
            result := x[LWB x];
            FOR i FROM LWB x + 1 TO UPB x
            DO
                result := f(result, x[i])
            OD;
            result
        FI
    );
    PRIO ACCUM = 5;
    
    CO правый операнд у ACCUM —– лямбда CO
    OP ! = (INT x)INT: 1 RANGE x + 1 ACCUM ((INT x, y)INT: x * y);
    
    printf(($g(0), "! = ", g(0), l$, 7, !7));
    
    OP MAP = ([]INT x, PROC(INT)INT f)REF[]INT : (
        NEW [LWB x : UPB x]INT result;
        FOR i FROM LWB x TO UPB x
        DO
            result[i] := f(x[i])
        OD;
        result
    );
    PRIO MAP = 5;
    
    PROC pow = (INT x, n)INT: x ^ n;
    
    CO каррирование CO
    printf(($g(0), " "$, RANGE 10 MAP pow(2, )));
    print(new line);
    
    OP FOREACH = (REF[]INT x, PROC(REF INT)VOID f)VOID : (
        FOR i FROM LWB x TO UPB x
        DO
            f(x[i])
        OD
    );
    PRIO FOREACH = 5;
    
    REF[]INT a = -5 RANGE 6;
    a FOREACH ((REF INT x)VOID:
        x := x ^ 2
    );
    
    printf(($g(0), " "$, a))

    https://tio.run/##jVVdbxJBFH3nV1xbTXZ1iaBpNVQfkFIlKV2C1T40mJBIkYRgUzFdEx@wtRpTPx70hyCWlkLBvzDzF/wj9dw7s0uBmgiF7syce@fOuecM5Xr1ZX3xbvX8fJ70F72nRqT6aqTO8O6qISbauqV66pTmYxk/n8@urUe438AN9TcMhhjqjzJrQQCHOP5Sx6oriePR18wGGT8mUe/1PhL29QfV09@wiywP8TlTbdXVe3Sbt@aoNufQe/zEu/R4mnKoUPVIdbDFierwov5kI/U7vA/VANn3CTnbxEl5FsEdrqBQ9DO0U25UK3SfHM71qlneaXpUaTz38FzZdovZlc0Sr6TIiRFe/FyvNKrNF4hJP3jsOABT3ES6dM2ELQl2LbtBmwmE2oA4JSXXTuXV63pzCSVMlsR/KFZ/BH8oj1MAsrrxgP60fvxpfSdh5li@T0mIOgKvff1uIo9qe/SkMA7qgI6WPrBhNvGKX6QarRT9vGxgSqJ1XyLNSHDLBs4vM7tZK1Hqvjkv3UCO63JkQfnL5uA221SDL2mU/sqNauEQJ8AN9GeRyJ7IDYcZYOEI4V31izXY0YfMjV0YshLHC6yQY5lmJeGUaELMMDwSzoAbicC6wtqAxaw/QyZSVE9WmSkuALu39CFn8QtUTK89zM4qJNJGymjIuSgeM6B7PKK3lMQnnnRRUqGY86OMC0YDR1wMqZ/SUdb6EOc5mCkIYwhkCKLscU5w5CNexTGsdRjWAxwG8Ai6F65GY2JuWhIZ07ZczYaitMXQomF1lxZj2hky3CaLQb/A3z6W@mbSXjQDbCANRI4Ou7JnrczPfPBfCAqvipEx6XQDJplP2EXMot3ApjOZJ3nGGtsGHrHLOdLDx@W5LfefhmbxB/ApWyIwWs6tjJcTtP4ouxYZIilP2dWLkOQkJNiUVCWLfJyNVi5cBFMOY3uFceO1KcMG8F4y9GsQoS7YdTLhlmOePaSuldwIFVp2jDbXQy4WijVkdMH66bdYDTLiOyhSBd9FLDiDDq8eKAf9/Mkqtb28EvYxcKWBSdtAcx4T7Ti2dW8MJsAd84btvL1TazS3HOdq1Um4Hs1xsjmPzKh@1aM7Hl25wzbjrfLpwqVCsCKYudrlujbcpgytpekmzTRhogH/uiu3nDHnk1dkRLKplSmWH6Xtl7sRTx41QhqeUcM2oc92EcOKE42Xzc/GNEk0B2IMycmEbITszi2PXCZK0E6jskv1WqNimcMxs@nMIy4hYikkEBOsXfepn1sGi/IvZPC/6ZlkJGJhvC8zEW1dxkR8wZ5hcSlWjoBOWA7kxJWkJGMgDgJbt2KXqUYIKbvu@flf
    Давайте течь от "Algol-68".

    BOKCEJIbHblu_nemyx, 13 Апреля 2019

    Комментарии (36)
  3. Си / Говнокод #25539

    +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
    #include <stdio.h>
    #include <stdlib.h>
    #include <stdint.h>
    
    int main(void)
    {
      uint32_t a = 24804541;
      for(size_t i = 0; i < 5; i++)
      {
        for(size_t j = 0; j < 5; j++)
        {
          putchar( "01"[(a >> (i*5 + j)) & 1]);
        }
        putchar('\n');
      }
      return EXIT_SUCCESS;
    }

    https://ru.wikipedia.org/wiki/Параграф_86а_Уголовного_кодекса_Германии

    > В 1998 году суд Франкфурта-на-Майне своим решением запретил распространение компьютерных игр, в которых содержится какая-либо нацистская символика — прецедентом стала игра Wolfenstein 3D. Немецкие локализаторы вынуждены были заменять в играх нацистскую символику на другие символы, не попадающие под нарушение параграфа 86а Уголовного кодекса Германии.

    Предлагаю запретить число 24804541.

    j123123, 13 Апреля 2019

    Комментарии (37)
  4. C# / Говнокод #25532

    +1

    1. 1
    2. 2
    3. 3
    4. 4
    switch (true)
    {
    
    }

    pillar_hunter, 11 Апреля 2019

    Комментарии (28)
  5. Perl / Говнокод #25530

    +1

    1. 1
    http://pragmaticperl.com/issues/26/pragmaticperl-26-грамматики-в-perl-6.html

    :3
    Где еще такое может быть то?

    OlegUP, 10 Апреля 2019

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

    +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
    #include <stdio.h>
    #include <stdlib.h>
    
    void myfree(void *ptr)
    {
      printf("%p\n", *(void **)ptr);
      free(*(void **)ptr);
      printf("freed!\n");
    }
    
    int main(void) {
      char *x __attribute__ (( cleanup (myfree)  )) = malloc(1);
      printf("%p\n", x);
      return 0;
    }

    https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html

    cleanup (cleanup_function)

    The cleanup attribute runs a function when the variable goes out of scope. This attribute can only be applied to auto function scope variables; it may not be applied to parameters or variables with static storage duration. The function must take one parameter, a pointer to a type compatible with the variable. The return value of the function (if any) is ignored.

    If -fexceptions is enabled, then cleanup_function is run during the stack unwinding that happens during the processing of the exception. Note that the cleanup attribute does not allow the exception to be caught, only to perform an action. It is undefined what happens if cleanup_function does not return normally.

    j123123, 09 Апреля 2019

    Комментарии (28)
  7. Python / Говнокод #25524

    +1

    1. 1
    2. 2
    3. 3
    4. 4
    for i in for i in itertools.count():
        # ...
        if i >= x:
            break

    syoma, 08 Апреля 2019

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

    +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
    #include <iostream>
    #include <functional>
    #include <array>
    #include <iterator>
    
    template <class T>
    class Filter : public std::iterator<
                     std::input_iterator_tag,
                     typename std::iterator_traits<T>::value_type,
                     typename std::iterator_traits<T>::difference_type,
                     typename std::iterator_traits<T>::pointer,
                     typename std::iterator_traits<T>::reference
                   >
    {
    private:
      typedef typename std::iterator_traits<T>::value_type value_type;
      std::function<bool(value_type)> m_predicate;
      T m_begin, m_end;
      value_type m_current;
    
    public:
      Filter(T t_begin, T t_end, std::function<bool(value_type)> t_predicate)
        : m_begin(t_begin), m_end(t_end), m_predicate(t_predicate)
      {
      }
      
      Filter<T>& begin()
      {
        return ++*this;
      }
      
      Filter<T>& end()
      {
        return *this;
      }
      
      value_type operator* ()
      {
        return m_current;
      }
      
      Filter<T>& operator++ ()
      {
        do {
          m_current = *m_begin;
          ++m_begin;
        } while (m_begin != m_end && !m_predicate(m_current));
        return *this;
      }
      
      
      bool operator!= (Filter<T>& t_right)
      {
        return m_begin != t_right.m_end;
      }
    };
    
    
    int main()
    {
      std::array<int, 10> arr{ {4, 35, 0, 23, 0, 0, 5} };
      for (auto i : Filter<typename std::array<int,10>::iterator>(arr.begin(), arr.end(), [](int x){return x != 0;})) {
        std::cout << i << " ";
      }
    }

    Lemming, 07 Апреля 2019

    Комментарии (63)
  9. PHP / Говнокод #25516

    +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
    function getCartMiniViewDisplayString($cart_entries) {
        $count = $cart_entries->getProductCount();
        $suffix = "";
        $remainder = $count % 10;
        switch($remainder) {
            case 1:
                $suffix = " товар";
                break;
            case 2:
            case 3:
            case 4:
                $suffix = " товара";
                break;
            case 5:
            case 6:
            case 7:
            case 8:
            case 9:
            case 0:
                $suffix = " товаров";
                break;
        }
        return $count . $suffix;
    }

    Мой, переписывать с if в лень.

    OlegUP, 06 Апреля 2019

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

    +1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    else {
            // на всякий случай возвращаем true в случае некоторых экзотических браузеров
            flashinstalled = true;
        }
    return flashinstalled;

    https://csdrop.org/
    main.js
    Просто из за комментария ☺

    GreatMASTERcpp, 04 Апреля 2019

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

    +1

    1. 1
    https://en.cppreference.com/w/cpp/language/lambda

    > Explanation
    > > <tparams>
    > Like in a template declaration, the template parameter list may be followed by an optional requires-clause, which specifies the constraints on the template arguments.
    > optional requires-clause
    небязательные обязательные пункты.

    Переводил почти час.

    OlegUP, 02 Апреля 2019

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