1. C++ / Говнокод #16252

    +25

    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
    unsigned char ToChar(const char& c1, const char& c2)
    {
        static map<char,int> mapping;
        mapping['0'] = 0;
        mapping['1'] = 1;
        mapping['2'] = 2;
        mapping['3'] = 3;
        mapping['4'] = 4;
        mapping['5'] = 5;
        mapping['6'] = 6;
        mapping['7'] = 7;
        mapping['8'] = 8;
        mapping['9'] = 9;
        mapping['A'] = 10;
        mapping['B'] = 11;
        mapping['C'] = 12;
        mapping['D'] = 13;
        mapping['E'] = 14;
        mapping['F'] = 15;
        return (unsigned char)(mapping[c2] + mapping[c1] * 16);
    }
    
    int main()
    {
        // Assuming "vector<unsigned char> content" stores the data in Hex format, one Hex character per cell.
        for(size_t i=0, j=0; i < content.size(); i+=2, j++)
        {
            content[j] = ToChar(content[i], content[i+1]);  // one unsigned char => 2 Hex characters 
        }
    }

    Индусы на СО. Я даже не знаю, что тут самое нелепое.
    http://stackoverflow.com/a/24470147/2489083

    Запостил: javahutt, 28 Июня 2014

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

    • >Статическая переменная
      >инициализация произведена не в конструкторе

      Плюсанул бы уже за это.
      Ответить
    • А что не так?
      Ответить
      • всё не так
        Ответить
      • Принимать чар по константной ссылке?
        Присваивание 16 значений каждый запуск функции?
        Построение дерева с сопутствующими накладными расходами на поддержку и доступ ради хранения 80 байт информации?
        Потенциальный выход за границы вектора?

        Нет, всё нормально.
        Ответить
        • Выхода за границы нет - там же map - если ключа нет, он вернёт 0 и добавит элемент в карту.
          Кстати, дерево построится 1 раз, вероятно оно достаточно умное, чтобы 16 раз (на каждый вызов) перезаписать значения в существующих узлах без перестроения.

          UPDATE: А, понял. Выход за вектор в main'е имелся в виду. Я что-то main невнимательно смотрел. Но если известно, что длина чётная, то всё хорошо.
          Ответить
          • Дерево построится один раз, но 16 доступов к элементам + запись на каждый вызов останутся.
            + Каждая нода хранит как минимум 3 указателя. То есть на накладные расходы на поддержание дерева мы тратим больше памяти чем заняла бы простая и быстрая lookup table для всех 256 значений чара.
            Ответить
        • И ще один косяк
          Ответить
    • https://ideone.com/S44SJH
      Ответить
      • фу фу фу
        еще один индус?
        накой тебе пробелы? чтобы прилепить нахер не сдавшиеся регулярки? а в нижний регистр зачем привел? явно, чтобы пожрать памяти и дать фору джаваскрипту
        Ответить
        • А я ебу какая строка придет на вход? "Suck my balls, uncle Sam"?
          Ответить
          • какая бы ни пришла - это не повод её несколько раз проходить и анализировать, тратя проц и память, прежде чем начать исполнять свой несчастный алгоритм из одной строки
            а 3.1415 подгонит пацанский битоебский алгоритм, который будет преобразовывать сразу пачками по 4/8 символов
            Ответить
            • https://ideone.com/LzQjaE

              с пацанским методом
              Ответить
              • > return (f < 'a') ? (f < 'A') ? f - '0' : f - 'A' + 10 : f - 'a' + 10;
                > if (chToInt > 15||chToInt<0)
                Ну и срань. Оно ':', к примеру, распарсит как 10.
                Ответить
                • B то верно. Говно нагородил. Щас исправим
                  Ответить
                • https://ideone.com/ZnN5LO

                  А вывод прост- не надо выебываться
                  Ответить
                  • Ну имеет право на жизнь, если по постановке надо все мусорные символы игнорить. Но я бы всё-таки проверил, что scd в конце false (последний байт допарсился).

                    > А вывод прост- не надо выебываться
                    +1. Но if (scd = !scd) это самый настоящий выебон. За такое тебя коллеги вместе с тимлидом подвергнут анальной каре.
                    Ответить
                    • >>Но if (scd = !scd) это самый настоящий выебон.

                      Это лень писать еще одну строку
                      >>Но я бы всё-таки проверил, что scd в конце false (последний байт допарсился).
                      Не наши проблемы если в строке нечетное количество валидных символов. Кочесно можно упасть с пеной из рта...
                      Ответить
                      • > Это лень писать еще одну строку
                        Пишут код один раз, а читать будут дохера. Поэтому ориентироваться надо на удобство чтения.

                        > Не наши проблемы если в строке нечетное количество валидных символов.
                        Царь, ты?

                        > Кочесно можно упасть с пеной из рта...
                        Ну я предпочитаю узнавать об ошибках, а не замалчивать их... Хотя опять же, все зависит от постановки.
                        Ответить
                        • Ну мне норм читается.

                          >>Ну я предпочитаю узнавать об ошибках, а не замалчивать их... Хотя опять же, все зависит от постановки.

                          Ну тогда нужно и от левых символов умирать

                          https://ideone.com/WGqhhY
                          Ответить
                        • https://ideone.com/yc24GF

                          Говно иного сорта
                          Ответить
                  • cleaned
                    Ответить
                    • > патч
                      Заплатку, раз уж script - рулон. Ни к чему эти англицизмы :)
                      Ответить
            • > пацанский битоебский алгоритм
              http://govnokod.ru/12822
              Ответить
        • Согласен, регистр лишнее. О регулярках - если не хочется - есть метод GetIntArrFromHexStr - пожалуйста, на свой страх и риск
          Ответить
          • > О регулярках - если не хочется - есть метод GetIntArrFromHexStr - пожалуйста, на свой страх и риск
            Дык можно было в него и встроить проверку, и кидать исключение, если что-то пошло не так. Регулярки и проход с копированием ради удаления пробелов тут совсем ни к чему.
            Ответить
      • llet number_hex n =
          let result =
            String.make
              ((int_of_float ((log (float_of_int n))
                              /. ((log 2.0) *. 4.0))) + 1) '#' in
          let rec loop n i =
            if i >= 0 then
              begin
                result.[i] <- "0123456789ABCDEF".[n land 15];
                loop (n lsr 4) (i - 1)
              end
            else result in
          loop n ((String.length result) - 1);;

        Вот, я тоже нашел свои детские факториалы.
        Ответить
    • статическая карта называется свичом
      Ответить
      • Свичом бы было если бы там хеш-карта была. А так — медленное говно.

        Хотя функциональненько.
        Ответить

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