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

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

    +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
    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
    #!/usr/bin/env python3
    # -*- coding: UTF8 -*-
    from datetime import date
    from os import environ, mkdir, system
    from os.path import dirname, exists, join as path_join
    from time import time
    
    
    def check_verbose():
        return environ.get("DEBUG") in ("true", "True", "TRUE", True, "yes", "Yes", "YES")
    
    
    class Timer:
        def __init__(self):
            """
            Объект добавляет в начале текста временные метки
            """
            self.start_epoch = self.last_call = time()
    
        @staticmethod
        def __fully_scope(timer: int or str) -> str:
            """
            Преобразует однозначные значения в двузначные.
            :param timer: Время
            :return: Двузначное значение
            """
            if len(str(timer)) == 2:
                return str(timer)
            elif len(str(timer)) == 1:
                return "0" + str(timer)
            elif len(str(timer)) <= 0:
                return "00"
            elif len(str(timer)) >= 2:
                return str(timer)[:2]
    
        def __formatter(self, timestep: float) -> str:
            """
            Форматирует время
                :return: время hh:mm:ss
            """
            _hours = int(timestep // 3600), int(timestep % 3600)
            _minute = int(_hours[1] // 60), int(_hours[1] % 60)
    
            _current_epoch = f"{self.__fully_scope(_minute[0])}:{self.__fully_scope(_minute[1])}"
            if _hours[0] > 0:
                _current_epoch = f"{_hours[0]}:" + _current_epoch
            return _current_epoch
    
        def __call__(self, fix_call: bool = True) -> str:
            """
            Считает время с начала сценария + с последнего шага
                :return: время hh:mm:ss(+hh:mm:ss)
            """
            current_epoch = self.__formatter(time() - self.start_epoch)
            timedelta_epoch = self.__formatter(time() - self.last_call)
            if fix_call:
                self.last_call = time()
    
            return f"{current_epoch}(+{timedelta_epoch})"
    
        def __bool__(self):
            return True
    
    
    class Logger:
        def __init__(self, name: str):
            self.start_time = time()
            self.name = name.upper()
            self.timer = Timer()
            self.log_file = path_join(environ["RESULT_DIR"], name, f"{name}_{date.today().isoformat()}.log")
    
        def check_file(self):
            if not exists(self.log_file):
                if not exists(dirname(self.log_file)):
                    mkdir(dirname(self.log_file))
                system(f"echo {date.today().isoformat()}> {self.log_file}")
    
        def save_log(self, msg: str):
            self.check_file()
            with open(self.log_file, "a+") as _log_file:
                _log_file.write(msg + "\n")
    
        def massage(self, msg: str):
            print(f"{self.timer()}::{self.name}::{msg}")
            self.check_file()
            self.save_log(f"{self.timer()}::{self.name}::{msg}")
    
        def multi_msg(self, level: str, msg: any):
            if isinstance(msg, (str, int, float, bool)):
                self.massage(f"{level.upper()}::{msg}")
            elif isinstance(msg, (tuple, list, set)):
                for _msg in msg:
                    self.multi_msg(level, _msg)
            elif isinstance(msg, dict):
                for _msg_key in msg:

    Ну собственно самописный логгер, потому что "библиатечный логгер переусложнен НИНАДА!"

    dicklover, 19 Октября 2022

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

    +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
    class FileCheckError(Exception):
    
        def __init__(self, check, file):
            self.check = check
            self.file = file
            self.exceptions = ['не является файлом',
                               'не является .wav файлом',
                               'не находится в списке требуемых сэмплов',]
    
        def __str__(self):
            return f'{self.file} {self.exceptions[self.check]}'
    
    
    def validate_pack(pack) -> list:
        """
        Checks for invalid files in a pack folder
        Makes a list of invalid files if found any or
        makes a list of accepted samples
        """
        accepted_samples = []
        found_errors = []
    
        for sample in listdir(pack):
            checks = [isfile(join(pack, sample)),
                      fnmatch(sample, '*.wav'),
                      Path(pack / sample).stem in required_samples, ]
            try:
                for check in range(len(checks)):
                    if not checks[check]:
                        raise FileCheckError(check=check, file=sample)
            except FileCheckError as E:
                found_errors.append(str(E))
                continue
    
            accepted_samples.append(sample)
    
        if len(found_errors) != 0:
            return found_errors
        else:
            return accepted_samples
    
    result = validate_pack(Path('drumpacks/rock'))
    print(result, sep='\n')

    rockkley94, 07 Октября 2022

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

    +1

    1. 1
    С днём программиста, питухи!

    И курицы.

    3_dar, 13 Сентября 2022

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

    +1

    1. 1
    Яндекс сгнил :(

    hormand, 12 Сентября 2022

    Комментарии (5)
  6. Go / Говнокод #28342

    +1

    1. 1
    Конструктор по умолчанию?

    Не, не слышали.
    Рефлексией итерируемся по свойствам и вызываем функцию инициализации полей ))))))))))))))

    3_dar, 22 Августа 2022

    Комментарии (62)
  7. 1C / Говнокод #28338

    +1

    1. 1
    СТРЗАМЕНИТЬ(СОКРЛ(СТРЗАМЕНИТЬ(уатПутевойЛист.Номер, "0", " ")), " ", "0") КАК НомерПЛ,

    Удаляет нули в номере документа для вывода на печатную форму

    serving12, 18 Августа 2022

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

    +1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    /**
         * @param string $login
         * @return User
         * @throws GuzzleException
         */
        public function getExternalUser(string $login):FreeIpaUser{
            return $this->UserFactory->createUser($login,$this->getUser($login));
        }

    1g0rbm, 16 Августа 2022

    Комментарии (4)
  9. Куча / Говнокод #28323

    +1

    1. 1
    Из-за тебя ушел я, %username%!

    Ня, пока.

    hormand, 08 Августа 2022

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

    +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
    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
    #include <stdio.h>
    #include <string.h>
    #include <inttypes.h>
    
    void swap(uint8_t *x, uint8_t *y)
    {
        uint8_t tmp;
        tmp = *x;
        *x = *y;
        *y = tmp;
    }
    
    // эту хуйню тоже можно нагенерировать
    uint64_t cmp_bits(uint8_t a[restrict 9])
    {
      return 
      ((uint64_t)(a[0] < a[1]) << 0) |
      ((uint64_t)(a[0] < a[2]) << 1) |
      ((uint64_t)(a[0] < a[3]) << 2) |
      ((uint64_t)(a[0] < a[4]) << 3) |
      ((uint64_t)(a[0] < a[5]) << 4) |
      ((uint64_t)(a[0] < a[6]) << 5) |
      ((uint64_t)(a[0] < a[7]) << 6) |
      ((uint64_t)(a[0] < a[8]) << 7) |
    
      ((uint64_t)(a[1] < a[2]) << 8)  |
      ((uint64_t)(a[1] < a[3]) << 9)  |
      ((uint64_t)(a[1] < a[4]) << 10) |
      ((uint64_t)(a[1] < a[5]) << 11) |
      ((uint64_t)(a[1] < a[6]) << 12) |
      ((uint64_t)(a[1] < a[7]) << 13) |
      ((uint64_t)(a[1] < a[8]) << 14) |
    
      ((uint64_t)(a[2] < a[3]) << 15) |
      ((uint64_t)(a[2] < a[4]) << 16) |
      ((uint64_t)(a[2] < a[5]) << 17) |
      ((uint64_t)(a[2] < a[6]) << 18) |
      ((uint64_t)(a[2] < a[7]) << 19) |
      ((uint64_t)(a[2] < a[8]) << 20) |
    
      ((uint64_t)(a[3] < a[4]) << 21) |
      ((uint64_t)(a[3] < a[5]) << 22) |
      ((uint64_t)(a[3] < a[6]) << 23) |
      ((uint64_t)(a[3] < a[7]) << 24) |
      ((uint64_t)(a[3] < a[8]) << 25) |
    
      ((uint64_t)(a[4] < a[5]) << 26) |
      ((uint64_t)(a[4] < a[6]) << 27) |
      ((uint64_t)(a[4] < a[7]) << 28) |
      ((uint64_t)(a[4] < a[8]) << 29) |
    
      ((uint64_t)(a[5] < a[6]) << 30) |
      ((uint64_t)(a[5] < a[7]) << 31) |
      ((uint64_t)(a[5] < a[8]) << 32) |
    
      ((uint64_t)(a[6] < a[7]) << 33) |
      ((uint64_t)(a[6] < a[8]) << 34) |
    
      ((uint64_t)(a[7] < a[8]) << 35);
    }
    
    void printshit(uint8_t a[restrict 9])
    {
      size_t i = 0;
      while(*a != 4)
      {
        a++;
        i++;
      }
      printf("arr[%" PRIu64 "] = %zu\n", cmp_bits(a), i);
    }
    
    void permute(char *a, size_t l, size_t r)
    {
      size_t i;
      if (l == r)
        printshit(a);
      else
      {
        for (i = l; i <= r; i++)
        {
          swap((a+l), (a+i));
          permute(a, l+1, r);
          swap((a+l), (a+i));
        }
      }
    }
    
    int main()
    {
        uint8_t a[] = {0,1,2,3,4,5,6,7,8};
        size_t n = 9;
        permute(a, 0, n-1);
        return 0;
    }

    https://govnokod.ru/24496#comment782476

    Построение таблицы поиска для быстрого нахождения медианы. Там эту хуйню конечно можно улучшить, например запаковывать число от 0 до 8 в хуйни по 4 бита

    j123123, 31 Июля 2022

    Комментарии (55)
  11. Lua / Говнокод #28288

    +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
    local victim_say={"Конец мне приходит...", "Помираю я... Помоги...", "Браток, помоги!",
    "Аптечку! Дай аптечку!","Врача, батенька.", "Под пулю я попал.", "Я ранен!","Слышь, браток, помоги!","Хана мне приходит","Сегодня не мой день...","Заболел я."}
    local vs=#victim_say
    
    
    local actor_say={"Тебе плохо? Может, врача вызвать?", "Могу дать номер знакомого врача.", "Мда, скорая не успеет.",
    "Не беспокойся, все там будем!","Корми червей, падла.","Умри!","Дойдёшь до больницы?","Извини, я не доктор.","Выкручивайся сам","Мне некогда"}
    local ds=#actor_say	
    
    
    local victim_ans={"Ну и подонок же ты, Меченый.", "Проваливай!", "Обойдусь сам!", "Помощь от тебя была бы хуже смерти. Проваливай!","Я ещё доберусь до тебя!", "Подонок!", "Моя смерть будет на твоей совести.","Встретимся в аду.","Просто уходи.","Я ещё вернусь...","Это ещё не конец."}
    
    local va=#victim_ans
    
    local victim_tnk={"Спасибо! Ты меня спас!", "Благодарю! Признаться, не ожидал.", "Спасибо, Меченый!", "Спасибо за помощь!","Я ещё живой? Это благодаря тебе!", "Ты мой спаситель!", "Моя смерть была бы на твоей совести","Я твой должник!","Ты ждешь благодарности?","На твоем месте я бы тебя пристрелил","Мерси за помощь!"}
    
    local vt=#victim_tnk
    
    	
    function init_intro_dialogb(dlg)
    	local k,v = 0,0
    	local phr = dlg:AddPhrase("","0","",-10000)
    	phr = dlg:AddPhrase("","1","0",-10000)
    	
    	local id=math.random(vs)
    	local ph=dlg:AddPhrase(victim_say[id],"333","1",-10000)
    	local ps = ph:GetPhraseScript()
    	ps:AddPrecondition("dialogs.is_wounded")
    	ph = dlg:AddPhrase("(Лечение)","444","333",-10000)
    	ps = ph:GetPhraseScript()
    	ps:AddAction("doctor.heal")
    	
    	local id=math.random(vt)
    	ph = dlg:AddPhrase(victim_tnk[id],"555","444",-10000)
    	--ps = ph:GetPhraseScript()
    --	ps:AddAction("dialogs.break_dialog")
    
    	
    	
    	
    	local id=math.random(ds)
    	local ph=dlg:AddPhrase(actor_say[id],"666","333",-10000)
    	local id=math.random(va)
    	local ph=dlg:AddPhrase(victim_ans[id],"777","666",-10000)
    
    	
    	
    
    
    	
    	for k,v in pairs(phrase.intro) do
    		phr = dlg:AddPhrase(v.name, v.phr_id, "1", -10000)
    		if phr then
    		
    			
    		
    			local phrase_script = phr:GetPhraseScript()
    			phrase_script:AddPrecondition("dialog_manager.precondition_intro")
    			--' Этот экшн запоминает последнюю фразу, чтобы персонаж говорил одно и то же.
    			--' Для фразы просьбы о помощи его добавлять не надо.
    			if v.wounded == "false" then
    				phrase_script:AddAction("dialog_manager.phrase_action_intro")
    			end
    		end
    	end
    	
    end

    Лечения раненых в Сталкере ТЧН. В диалоге с ранен(н)ым показывается как пункт "вылечить" так и рандомное издевательство, вроде "могу дать номер своего врача"

    CBuHOKYP, 21 Июля 2022

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