1. Python / Говнокод #29074

    0

    1. 1
    def neg(x): return int(bin(x)[2:].rjust(8, '0').replace('1','x').replace('0','1').replace('x','0'), 2)

    Операция "NEG"

    Запостил: j123123, 16 Января 2025

    Комментарии (49) RSS

    • Перевел через https://www.codeconvert.ai/python-to-c-converter :
      #include <stdio.h>
      
      int neg(int x) {
          char binary[9];
          for (int i = 0; i < 8; i++) {
              binary[i] = (x & (1 << (7 - i))) ? '1' : '0';
          }
          binary[8] = '\0';
      
          for (int i = 0; i < 8; i++) {
              binary[i] = (binary[i] == '1') ? '0' : '1';
          }
      
          return (int)strtol(binary, NULL, 2);
      }


      Ну и хуйня! Для правильного перевода надь использовать библиотеку с длинной арифметикой, а не это вот. Кто сказал, что x должен содержать не более чем 8 бит?
      Ответить
      • Нужен не правильный перевод, а наиболее подходящий для реальной задачи
        Ответить
        • Для реальной задачи можно написать:
          int neg(int x)
          {
            return -x;
          }

          Хотя тут будет UB в одном особом числе, так что можно исправить в
          #include <limits.h>
          int neg(int x)
          {
            if (x == INT_MIN) return x;
            return -x;
          }
          Ответить
    • Авито это Кек Коммерц
      Ответить
    • К слову, NEG и NOT — не одно и то же.

      Для дополнительного кода (two’s complement):
      neg(x) = not(x) + 1


      А в прямом коде (который используется в плавпитухе) и инвертировать ничего не надо, только знак сменить.

      NEG совпадает с NOT только для обратного кода (one’s complement), который применялся в говне мамонта вроде UNIVAC.
      Ответить
      • И, кстати, число Тараса существует только в дополнительном коде (two’s complement). В прямом и в обратном его нету, но зато в них ноль со знаком.
        Ответить
      • Два комплимента лучше, чем Один.
        Ответить
    • # all_at_once = True for the sink parsing (/comments), False for optimized post parsing
      def _parse_comments(comments_node: lxml.etree._Element, all_at_once: bool = False) -> List[ParsedComment]:
          comments: List[ParsedComment] = []
      
          if all_at_once:
              hcomment_xpath = './/li[@class="hcomment"]'
          else:
              hcomment_xpath = './li[@class="hcomment"]'
          
          comment_nodes: List[Tuple[Optional[int], Any]] = [(None, c) for c in comments_node.xpath(hcomment_xpath)]
      
          while len(comment_nodes) > 0:
              parent_id, comment_node = comment_nodes.pop()
      
              comment_wrapper = comment_node.xpath('./div[@class="entry-comment-wrapper"]')[0]
              comment_link = comment_wrapper.xpath('./p[@class="entry-info"]/a[@class="comment-link"]')[0]
              m = re.search(r'govnokod\.ru/(\d+)#comment(\d+)$', comment_link.get('href', ''))
              if m is None:
                  raise ParseError('Invalid comment-link (no regex match)')
              post_id = int(m.group(1))
              comment_id = int(m.group(2))
              comments.append(_parse_comment_node(comment_wrapper, post_id, comment_id, parent_id))
      
              for node in comment_node.xpath('./ul/li[@class="hcomment"]'):
                  comment_nodes.append((comment_id, node))
      
          return comments


      ParsedComment* parse_comments(xmlNode *comments_node, int all_at_once, int *count) {
          ParsedComment *comments = NULL;
          *count = 0;
      
          const char *hcomment_xpath = all_at_once ? ".//li[@class='hcomment']" : "./li[@class='hcomment']";
          xmlNode *comment_nodes = xpath_nodes(comments_node, hcomment_xpath); // Implement xpath_nodes function
      
          for (int i = 0; i < comment_nodes->length; i++) {
              xmlNode *comment_node = comment_nodes->nodes[i];
              comments = realloc(comments, sizeof(ParsedComment) * (*count + 1));
              comments[*count] = parse_comment_node(comment_node, post_id, comment_id, parent_id);
              (*count)++;
          }
      
          return comments;
      }

      Какой багор )))
      Ответить
      • if (strstr(input_usr, "null") && strstr(input_usr, "chat")) {
                char query[1024];
                snprintf(query, sizeof(query), "INSERT INTO %s%s_usr SET time=%ld, uid=%d, usr=%d, uname=\"%s\", host=\"%s\" ON DUPLICATE KEY UPDATE uid=%d, time=%ld, usr=%d, uname=\"%s\", host=\"%s\"",
                         conf.db.prefix, arg.modpath, time(NULL), conf.user.uid, atoi(input_usr), mpquot(input_usr < 0 ? strcat(conf.settings.default_usr, "_", abs(atoi(input_usr))) : input_uname), mpquot(input_host), conf.user.uid, time(NULL), atoi(input_usr), mpquot(input_usr < 0 ? strcat(conf.settings.default_usr, "_", abs(atoi(input_usr))) : input_uname), mpquot(input_host));
                mpqw(query);
        
                conf.tpl.data = mpql("SELECT id.*, u.name FROM %s%s_index AS id LEFT JOIN %susers AS u ON id.uid=u.id ORDER BY id DESC LIMIT %d",
                                     conf.db.prefix, arg.modpath, conf.db.prefix, (atoi(input_usr) ? atoi(input_usr) : 20));
                conf.tpl.users = mpql("SELECT * FROM %s%s_usr WHERE time>%ld ORDER BY id",
                                      conf.db.prefix, arg.modpath, time(NULL) - conf.settings.chat_user_online);
                // Assuming krsort is implemented to sort conf.tpl.data
            }
        
            conf.db.conn = conf.db.back;
            mysql_close(conf.db.conn);
            return 0;
        }
        Ответить
    • https://pbs.twimg.com/media/GhkMYEhXIAA7sEn?format=jpg&name=medium
      Ответить
      • Зато в говновозе — два.
        Ответить
        • Гост зачем люди кладут vcruntime140.dll в папку приложеия? почему не взять то, что есть в system32?
          Ответить
          • Привычка, выработанная со времён win95.
            Ответить
            • могу-ли я удалить этот файл, поставить последний с MS, и жлать, что он найдет его в system32 же?
              Ответить
              • Обычно так работает.

                Не сработает, только если программа как-то хитро грузит dll (но это не про сишный рантайм) или использует трюки, завязанные на конкретную версию (но если у приложения есть манифест, то должна подгрузиться нужная версия из WinSxS).
                Ответить
                • а vcruntime есть в WinSxS?
                  Ответить
                  • Проверь.
                    Ответить
                    • The libraries deployment model no longer uses manifests to find a particular version of a dynamic link library. Instead, the name of each dynamic link library contains its version number, and you use that name to locate the library. For more information, see Deployment in Visual C++ 2010.
                      Ответить
                      • То есть все vcruntime140.dll друг с другом совместимы 100%?
                        Ответить
                        • Видимо обратно совместимы, да.
                          ABI поменяли в 2017-м году, и с тех пор 140. До этого было 130.

                          Я бы почитал что-то внятное про это в MSDN, потому что малость плаваю, но к сожалению искать "vcruntime140.dll" в гугле это примерно как искать "почему тормозит компьютер".
                          Ответить
                          • 130 пропустили. До VS 2015 (внутренний номер 14.0) версию ABI меняли с каждым выпуском студии.
                            Ответить
                        • ps: вроде чото нашел

                          `msvcr120.dll` это версия от 2013
                          начиная с 2015 версия vcruntime140

                          https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170

                          The latest version is 14.42.34433.0 (14!!)
                          предыдущая 12.0.40664.0 (12)

                          bnl
                          Ответить
                          • Во первых, есть vcruntime-цифры, msvcp-цифры, msvcr-цифры и ещё какие-то варианты.

                            Во-вторых, цифры — это внутренний номер студии. Ты же в курсе, что есть «товарный» номер (2005, 2010 — вот это всё), есть внутренний и есть версия конпелятора.

                            Такая же питушня с версиями у Борланда и у Андроида.

                            Нумерация продолжает шестую студию:
                            7.0 = 2002
                            7.1 = 2003
                            8.0 = 2005
                            9.0 = 2008
                            10.0 = 2010
                            11.0 = 2012
                            12.0 = 2013
                            13.0 — пропустили
                            14.0 = 2015
                            15.0 = 2017
                            16.0 = 2019
                            17.0 = 2022

                            Но после 14-й версии началась путаница: компоненты могут заявлять о себе не как версии 15, 16, 17, а как 14-с-копейками. Т. е. 14.00 (строго нули) — это VS 2015, а если не ноль (14.42, как в твоём реальном примере), то это более новые версии студий.
                            Ответить
                            • Всё, я разобрался.

                              цифры есть в википедии
                              https://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B#Internal_version_numbering

                              MS-CRT с майркрософт-специфичными плошками лежат в файлах типа `vcruntime140` (тут 140 это runtime library version 14)

                              До верси 2010 они лежали в WinSXS

                              >Microsoft Visual C++ 2005 and 2008 employ SxS with all C runtime libraries.

                              Начиная с Sutdio10 они стали кодировать версию в имени
                              https://govnokod.xyz/_29074/#comment-1312792
                              и их стало можно брать из system32 (куда их ставит редистрибл) или из папки самого приложения.

                              Начиная с версии 2015 (CRT 14) они все обратно совместимы
                              -------

                              Начиная с 2015 так же часть CRT перекочевала в UCRT (UCRTBASE.DLL).
                              Это аналог libc, и часть системы. оан не MS-специфична, и против нее может линковаться не только VC.

                              Редистрибутил ее тоже может поставить (если ее нет) но вообще с Win10 она сама приезжает и обновляется а апдейтом

                              VC линкуются И с vcruntime140 И с UCRTBASE.DLL (с последним -- через систему API Sets).

                              Брать vcruntime140 можно по-прежнему из папки или из system32, а вот UCRTBASE ВСЕГДА берется из системы на 10ке (на 8 нет, бо она про него ничего не знает)
                              Ответить
                              • До 10-й студии (2010) мажорный номер тоже был в версии, начиная с 7-й (2002), например, msvcr70.dll, но в пределах каждого мажорного номера были несовместимые минорные, а минорные в имени файла не отражались, поэтому их приходилось класть в winsxs (ну или с программой), чтобы ничего не сломать.
                                Ответить
                                • да, ты прав
                                  вот тут питух с этим ебеца
                                  https://stackoverflow.com/questions/12322185/visual-c-runtime-2005-version-download
                                  Ответить
                                  • Я с ужасом вспоминаю времена, когда из-за изменения минорной версии рантайма падали программы и приходилось redistributable копировать в папку с программой, чтобы починить, но для этого нужно было угадать точный номер версии...

                                    Напомню нетленку:
                                    http://books.mcwees.spb.ru/?compaq.html

                                    До шестой версии вообще было одно имя MSVCRT.DLL на все версии, а они были несовместимы, и всё ломалось к хуям после запуска очередного дебильного инсталлятора. Пользователи, не знающие о таких тонких материях переустанавливали систему полностью, потом снова накатывали все программы, и... снова всё ломалось.
                                    Ответить
                                    • Потому обычно клали их в папку программы, потому что если инсталлятор ставил их в system32, то всё и падало.

                                      потом завезли WinSXS.

                                      потом отказались (решили видимо поддерживать совместимость)

                                      потом разделили на MS и UCRT
                                      Ответить
                                    • у меня есть такой файлк -- MSVCRT.dll. Версии 7.0, тоесть от студии Visual Studio .NET 2002
                                      Ответить
                                      • Какой багор )))

                                        Вот нафига так делали?
                                        Ответить
                                        • как именно? перезаписываои файлы?

                                          чтобы экономить место. почитай про dll hell.

                                          Считалось, что программист может в обратную совместимость. но разумеется он не может
                                          Ответить
                                          • Несовместимые файлы именовали одинаково. Они думали, что у меня на компе весь софт будет скомпилированный одной версией студии?
                                            Ответить
                                            • знаешь такой файлик -- `python` (или `python.exe`) на винде?
                                              а расширение `.py` знаешь?P)

                                              Так что тут оин не одиноки.

                                              Скорее всего это получалось случайно. Я поправил .dll, и выпустил новую версию. Я не имел ввиду ломать совместимость, но случайно её сломал.

                                              Жопа в том, что системные файлы пользователь ставит не из единого репозитория, а с диска с играми. Игра1 принесла одну версию, Игра2 -- другую. игра1 завязалась на баг, который пофиксили в новой версии либы, и который ломает Игра2

                                              и что делать?

                                              &gt;Они думали, что у меня на компе весь софт будет скомпилированный одной версией студии?

                                              Именно потому я за BSD: там ровно так
                                              Ответить
                            • > a 2017 toolset (v141, versions 15.0 to 15.9)

                              Борхес рыдает.
                              Ответить
                          • Вот тут немножко информации:

                            https://en.m.wikipedia.org/wiki/Microsoft_Windows_library_files#MSVCRT.D LL,_MSVCP*.DLL_and_CRTDLL.DLL

                            Где-то на сайте MS я ещё видел, чем отличается msvcr от mscvp, но сейчас сходу не найду.
                            Ответить
                            • не повериш

                              msvcrXXXX.dll is the DLL for the C runtime library. msvcpXXXX.dll is the DLL for the C++ runtime library.

                              только msvcr перемиеновался в vcruntime140 с версии 14, а p так и остался msvcp140
                              Ответить
                              • Спасибо, надо запомнить, что «p» — это «плюс-плюс».
                                Ответить
                                • реальныепримеры.
                                  MS CRT для эскопртирует какие-то MS специфичные писки
                                  __vcrt_InitializeCriticalSectionEx

                                  MS-VC P эксапортирует плюсы
                                  ║class std::basic_istream<char,struct std::char_traits<char> > * }

                                  (они не универсальны и MS специфичны,. Чтобы писать на плюсах НЕ НА VC, тебе нужна ДРУГАЯ библиотека)

                                  а ucrtbase экспортирует нормальную сишку
                                  wcsnlen
                                  wcspbrk
                                  wcsrchr
                                  wcsrtombs
                                  wcsrtombs_s
                                  wcsspn
                                  wcsstr
                                  wcstod
                                  wcstof
                                  wcstoimax
                                  wcstok
                                  wcstok_s
                                  wcstol
                                  wcstold
                                  wcstoll
                                  wcstombs
                                  wcstombs_s
                                  wcstoul
                                  wcstoull
                                  wcstoumax
                                  wcsxfrm
                                  wctob
                                  wctomb
                                  wctomb_s
                                  wctrans
                                  wctype

                                  пиши против нее хоть на поскале
                                  Ответить
                                  • Наконец-то сделали по-человечески.

                                    4.0 вышла в 1995-м, UCRT завезли в 2015-м. Джвадцать лет понадобилось обезьянам, чтобы прийти к правильному решению.
                                    Ответить
                                  • > экспортирует нормальную сишку

                                    К слову, это для 64-битных процессоров пришли к одному call convention (вру, не к одному, есть как минимум sysv и ms), а у 32-битных и 16-битных был зоопарк.

                                    Например, на 32-битных процессорах msvcrt была с конвенцией cdecl (чтобы её можно было подсунуть вместо статической библиотеки, почти ничего не меняя в коде), а остальные dll — с конвенцией stdcall.
                                    Ответить
                                    • угу, и не факт, что твоя либа на паскале например имела бы ту же конвенцию.

                                      потому надо было специально помечать функции
                                      Ответить
                                      • Напомнило, как я вызвал бормандовскую BWCC.DLL из Питона, чтобы закосить под Дельфи:

                                        https://govnokod.xyz/_24405/#comment-375978

                                        Со второго раза получилось. Сначала я перепутал конвенцию и нагадил в стек.
                                        Ответить
                                        • Это же говно мамонта и не Дельфи и не Быдлер, а Broland See. И не рантайм, а Common Controls.
                                          Ответить
    • On Windows 6 X64, got an error 500 on any PHP files, installing the 2015 Visual c++ Redistributables x64 solved my problem.
      Ответить
    • C++ on Mars sure ain’t using exceptions anytime soon.
      и другие практики звездолётов
      Ответить

    Добавить комментарий