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

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

    0

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    Во сколько вы оцените время на разработку минимального сонсольного текстового редактора типа "vim" (назовем его "huim")
    со следующим функционалом:
    - 2 режима с переходами по "i" и "esc". Один режим редактирования текста, другой - режим команд.
    - только 2 команды - ":q!" и ":wq"
    - в текстовом режиме нихуя нет, кроме печатания символов, "Delete", "Backspace" и переходов по стрелкам.  
    
    
    Задача со звёздочкой:
    Что дополнительно надо, чтобы это работало во всех сонсолях: "Linux", "MacOS", "Windows", "ReactOS", "ColibriOS", " CentOS", "FreeBSD", "KDE", "Kubernetes"?

    P.S. Видел сегодня в метро на кольцевой дебила. Konardyan, это не ты был?

    LinuxGovno, 27 Ноября 2018

    Комментарии (160)
  3. Python / Говнокод #27354

    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
    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
    """
    This module provides a function merge_sort, which is one of the simplest and the
    most robust sorting algorithms, being relatively fast, having (n*log(n))
    complexity. Also, this module counts the number of inversions in a given array.
    Usage: import this module and use the function merge_sort. The first element in
    a returned tuple shall be a sorted array, while the second one will be a number
    of inversions in the array.
    
    Copyright (C) 2021 Sergay Gayorgyevich.
    
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Affero General Public License as
    published by the Free Software Foundation, either version 3 of the
    License, or (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Affero General Public License for more details.
    
    You should have received a copy of the GNU Affero General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
    """
    
    import argparse
    
    def merge_sort(array : list) -> (list, int):
        """
        MergeSort algorithm with additional inversion counting.
        input: array.
        output: sorted array and number of inversions in it.
        """
    
        if len(array) <= 1:
            return (array, 0)
        elif len(array) == 2:
            if array[0] > array[1]:
                array[0], array[1] = array[1], array[0]
                return (array, 1)
            return (array, 0)
    
        mid = len(array) // 2
        left, left_inversions = merge_sort(array[:mid])
        right, right_inversions = merge_sort(array[mid:])
    
        merged, split_inversions = _merge(left, right)
        return (merged, right_inversions + left_inversions + split_inversions)
    
    def _merge(left_array : list, right_array : list) -> (list, int):
        """
        This function isn't supposed to be called, it's an inner function of the
        module, and not a part of its API! 
    
        The purpose of this function is to merge two arrays. Due to the nature of
        the MergeSort algorithm, it operates two arrays, both of which are sorted.
        input: two sotrted arrays.
        output: sorted array, consisting of elements of both operated arrays.
        """
    
        resulting_array = list()
        inversion_count = 0
        c_len = len(left_array) + len(right_array)
    
        for i in range(c_len):
            if (len(left_array) != 0) and (len(right_array) != 0):
                if left_array[0] > right_array[0]:
                    inversion_count += len(left_array)
                    resulting_array.append(right_array.pop(0))
                else:
                    resulting_array.append(left_array.pop(0))
            elif len(left_array) == 0:
                resulting_array.append(right_array.pop(0))
            elif len(right_array) == 0:
                resulting_array.append(left_array.pop(0))
    
        return (resulting_array[:], inversion_count)
    
    # For testing purposes only! Do not use in production!
    if __name__ == '__main__':
        DESC = "Sort an array and print an amount of inversions it has." # Description for argparse.
        argparser = argparse.ArgumentParser(description = DESC)
        argparser.add_argument("elements", type = int, nargs = '+', help = "A list to be sorted.")
        args = argparser.parse_args()
        print(merge_sort(args.elements))

    Изучаю алгоритм "Сортировка Слиянием".

    KoWe4Ka_l7porpaMMep, 12 Апреля 2021

    Комментарии (159)
  4. Java / Говнокод #25392

    +3

    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
    /*
     * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
     * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     *
     * This code is free software; you can redistribute it and/or modify it
     * under the terms of the GNU General Public License version 2 only, as
     * published by the Free Software Foundation.
     *
     * This code is distributed in the hope that it will be useful, but WITHOUT
     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
     * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
     * version 2 for more details (a copy is included in the LICENSE file that
     * accompanied this code).
     *
     * You should have received a copy of the GNU General Public License version
     * 2 along with this work; if not, write to the Free Software Foundation,
     * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
     *
     * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
     * or visit www.oracle.com if you need additional information or have any
     * questions.
     */
    
    /* @test
       @bug 4890726
       @summary Check the correctness of KOI8_U by comparing to KOI8_R
     */
    
    import java.util.*;
    import static java.lang.Character.UnicodeBlock;
    
    public class UkrainianIsNotRussian {
        private static String decode(byte[] bytes, String encoding) throws Throwable {
            String s = new String(bytes, encoding);
            equal(s.length(), 1);
            check(Arrays.equals(s.getBytes(encoding), bytes));
            return s;
        }
    
        private static void realMain(String[] args) throws Throwable {
            final byte[] bytes = new byte[1];
            int differences = 0;
            for (int i = 0; i < 0xff; i++) {
                bytes[0] = (byte) i;
                final String r = decode(bytes, "KOI8_R");
                final String u = decode(bytes, "KOI8_U");
                if (! r.equals(u)) {
                    differences++;
                    final char rc = r.charAt(0);
                    final char uc = u.charAt(0);
                    final UnicodeBlock rcb = UnicodeBlock.of(rc);
                    final UnicodeBlock ucb = UnicodeBlock.of(uc);
                    System.out.printf("%02x => %04x %s, %04x %s%n",
                                      i, (int) rc, rcb, (int) uc, ucb);
                    check(rcb == UnicodeBlock.BOX_DRAWING &&
                          ucb == UnicodeBlock.CYRILLIC);
                }
            }
            equal(differences, 8);
        }
    
        //--------------------- Infrastructure ---------------------------
        static volatile int passed = 0, failed = 0;
        static void pass() {passed++;}
        static void fail() {failed++; Thread.dumpStack();}
        static void fail(String msg) {System.out.println(msg); fail();}
        static void unexpected(Throwable t) {failed++; t.printStackTrace();}
        static void check(boolean cond) {if (cond) pass(); else fail();}
        static void equal(Object x, Object y) {
            if (x == null ? y == null : x.equals(y)) pass();
            else fail(x + " not equal to " + y);}
        public static void main(String[] args) throws Throwable {
            try {realMain(args);} catch (Throwable t) {unexpected(t);}
            System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed);
            if (failed > 0) throw new AssertionError("Some tests failed");}
    }

    https://github.com/AdoptOpenJDK/openjdk-jdk11/blob/master/test/jdk/sun/nio/cs/UkrainianIsNotRussian.java

    j123123, 21 Февраля 2019

    Комментарии (159)
  5. Куча / Говнокод #18492

    +139

    1. 1
    2. 2
    3. 3
    4. 4
    Есть вопрос который меня давно мучает, он по поводу инкапсуляции, полеморфизма, нацизма и мазохизма.
    Почему хохлы так любят Java?
    Самый противный ЯП я считаю, синтаксис мерзкий, мерзкие обязательные классы, но кое что в нем радует, кроссплатформенность и неплохая производительность на первый взгляд не очевидная, но запись в миллиардный миссив происходит быстрее в жабе, чем на чистом Си без оптимизаций, но Си с -O2 все равно быстрее.
    И все таки почему украинцы так любят жабу, или они ничего другого не знают и как можно привыкнуть к такому противному ЯП?

    Что ни урок\лекция\сайт по жабе - то с украинским акцентом или лекция записаная на Украине или домен сайта .ua.

    pl7ofit, 18 Июля 2015

    Комментарии (159)
  6. PHP / Говнокод #15770

    +153

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    if($vOk)
    {
    	if($vOk)
    	{
    	...
    	}
    }

    Дополнительная проверка не повредит.

    any0ne2567, 17 Апреля 2014

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

    +133

    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
    // bormand: Ну что, затестим шейдер в WebGL...
    int iter = 0;
    while (iter < 1000 && length(z) < 2.0) {
        z = vec2(z.x * z.x - z.y * z.y, 2.0 * z.x * z.y) + c;
        iter++;
    }
    // compileShader: 'while' : This type of loop is not allowed
    
    // bormand: WTF?! В обычном OpenGL же работало, ну ок...
    int iter = 0;
    for (; iter < 1000; iter++) {
        if (length(z) < 2.0)
            break;
        z = vec2(z.x * z.x - z.y * z.y, 2.0 * z.x * z.y) + c;
    }
    // compileShader: 'for' : Missing init declaration
    
    // bormand: Да что за херня!?
    for (iter = 0; iter < 1000; iter++) {
    // compileShader: 'for' : Invalid init declaration
    
    // bormand: Подавись, сука!
    int iters = -1;
    for (int iter = 0; iter < 1000; iter++) {
        if (length(z) < 2.0) {
            iters = iter;
            break;
        }
        z = vec2(z.x * z.x - z.y * z.y, 2.0 * z.x * z.y) + c;
    }
    // compileShader: ok.

    bormand vs WebGL

    bormand, 07 Января 2014

    Комментарии (159)
  8. PHP / Говнокод #25724

    +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
    <?php
    
    
    $cd = dirname($_SERVER['SCRIPT_NAME'])."/resources";
    
    $type=$_GET["type"];
    
    if($type=="emptyhtml")
    {
    	header("Last-Modified: " . gmdate('D, d M Y H:i:s', time()) . 'GMT');
    	header("Expires: " . gmdate('D, d M Y H:i:s', time() + 2592000) . 'GMT');
    	header("Content-Type: text/html");
    	echo("<html><head><title>EMPTY</title></head><body></body></html>");
    	exit(200);
    }
    else if($type=="script")
    {
    	header("Content-Type: application/oct-stream");      //   -< здесь ишибка
    	
    	?>
    	
    	if(!window.CuteWebUI_AjaxUploader_OnPostback)
    	window.CuteWebUI_AjaxUploader_OnPostback=function()
    	{

    Не существует Content-Type: application/oct-stream
    Существует Content-Type: application/octet-stream
    Код работал с ошибкой 10 лет, перестал через директиву безопасности современный браузеров x-content-type-options: nosniff
    Это разработка Cute Editor for PHP https://cutesoft.net/downloads/17/default.aspx
    Гении тоже допускают ошибку...

    increazon, 17 Июля 2019

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

    0

    1. 1
    2. 2
    array_filter($input, $callback);
    array_map($callback, $input);

    OCETuHCKuu_nemyx, 31 Мая 2019

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

    +1

    1. 1
    #define BSWAP16(x) ( (uint16_t)(((uint32_t)x)*(1 | 1 << 16) >> 8) )

    j123123, 15 Марта 2019

    Комментарии (158)
  11. Куча / Говнокод #20133

    +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
    .. Подставные Зомби .. продолжение
      при наличии в Локации нескольких Фортов / Замков / Башен может сложиться ситуация ,что Защищать Форт 
    уже нечем и более удобно избрать местом занятия Алхимией какую-нибудь Башню . При этом может быть 
    что Пара Замков находиться под контролем не особо приветливой стороны хотя с ней есть Серый Нейтралитет. 
      как БелАякс понял из Серой Книги Некромантии в который было полно различных Серых Советов для 
    разных случаев : то в таком случае рекомендовалось от имени Белиара выставить на дорогу к Покинутому Форту любую 
    Зомби Группу обычно состоящую из 10 -ка Армий - особо указывалось что это должны быть Потрепанные Зомби 
    так как их потрепанный вид мог намекать на возможное скрытое Проклятие которое могла содержать 
    такая Зомби Группа : с одной стороны не Некроманту будет сложно определить так ли это , с другой 
    если это будет Некромант то тогда это будет наверняка Союзник к тому же Герой уже находится в Башне . 
      При наличии возможности обычную Башню можно было сделать Волшебной Башней или Серой Башней 
    и иметь возможность влиять на такие Зомби Группы .. но это был немного другой момент ,а именно в этом случае 
    даже необычный Герой скорее всего проедет мимо таковой Зомби Группы ,если  будет куда .. 
    ..а куда - это скорее всего туда к одному из двух замков из той Пары Замков . Чем по-сути обеспечивалась 
    безопасность Серой Башни и возможно Форта - ведь Замок был на порядок мощнее в обороне , если тот 
    удастся захватить - но тогда Бой с Зомби Группой не желателен если Герой не собирался штурмовать Форт 
    по той причине что если он штурманет Форт ,то на Замок ему уже сил не хватит : обычно выбирался более 
    приемлимый для Штурма Замок в котором можно было прилично долго Копить Силы ...

    LispGovno, 04 Июня 2016

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