1. Pascal / Говнокод #6689

    +107

    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
    function HexToInt(s: string): integer;
    label
      gte;
    var
      tempt: string;
      i: integer;
    begin
      tempt := '';
      if s = '' then
      begin
        HexToInt := 0;
        goto gte;
      end;
      for i := 1 to Length(s) do
      begin
        tempt := tempt + IntToHex(Ord(s[i]), 2);
      end;
      HexToInt := StrToInt('$' + tempt);
      gte:
    end;

    Ряд гениальных решений из-за незнания особенностей языка.

    Честно взято с: http://www.delphisources.ru/pages/faq/base/hex_to_int.html
    Честно написано автором: Перегинец Иваном ( [email protected] )

    Запостил: miLord-Corwin, 17 Мая 2011

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

    • А чё? Элегантненько.
      Я бы тоже так написал
      Ответить
    • показать все, что скрытоЛюбой делфишный код — говно по определению.

      yes, тарасик, накажи меня.
      Ответить
      • Кстати, первый коммент тоже я написал.
        Ответить
    • Не понял, это ваще работает?
      Ответить
      • Работает в прямом или переносном смысле?..

        В прямом - да, работает. Запускается, что-то делает, что-то выдает.
        В переносном - нет, не работает. Выдает полный бред.
        Ответить
    • > особенностей языка
      фтопку костыли языка!
      Ответить
    • вальс с бубном вокруг хекса
      великолепно
      Ответить
    • Нёх ту инт.
      Ответить
    • Сферический дельфишколокод в вакууме. Ну не осилил школьничек матана, ну что теперь сделаешь...
      Ответить
    • У меня один вопрос - какого хуя этот код делает в FAQ?
      Вообще у дельфи FAQ часто ущербные. Например, когда я искал алгоритм замены подстроки в строке, я надеялся найти что-то нормальное, с Кнутом-Моррисом-Праттом, например, но все время натыкался на решения, написанные на Дельфи в лоб. Ещё меня бесит их концепция "зато работает, и сразу, а ты оптимизатор хренов, будешь час умный алгоритм отлаживать".
      Ответить
      • говным-говно, зато оригинальный контент
        Ответить
      • "зато работает и сразу" оправдывает себя в 80% - сделал и продал. Вот только перед нами обычно стоят задачи из оставшихся 20%.
        Ответить
        • Сделал, продал, на все вопросы отвечаешь "купи новый проц". Пиздить надо за такое. Причём очень больно и от души.
          Ответить
          • сделал, продал, а потом хотят, что бы кто-то еще допиливал. А допиливающий смотрит и хуеет.
            Ответить
          • мне это тоже отвратительно, но пока работа программистов не станет дешевле закупки нового железа так и будет. а как программист, я бы не хотел работать за еду:(
            Ответить
    • показать все, что скрыто
      int hexToDec( hex:char ) {
      	if (hex <= "9" && hex >= "0")
      		return hex - 48;
      	else
      		return hex - 65;
      }
      int hexToDec( hex:char[] ) {
      	let:int R = 0, L = len( hex ) - 1;
      	for (let i:int = L; i >= 0; i--) {
      		R += pow(16, i) * hexToDec( hex[i] );
      	}
      }
      Ответить
      • показать все, что скрытоЧто за идиот...

        int hexToDec( hex:char ) = hex - hex <= "9" && hex >= "0" ? 48 : 55;
        int hexToDec( hex:char[] ) = [+] pow(16, i) * hexToDec(hex[i]) where i = [len(hex) - 1 .. 0];
        Ответить
        • показать все, что скрытоРекурсия.

          int hexToDec( hex:char ) = hex - hex <= "9" && hex >= "0" ? 48 : 55;
          int hexToDec( hex:char[], 0 ) = hexDigToDec(hex[0]);
          int hexToDec( hex:char[], i:int = len(hex) - 1 ) = pow(16, i) * hexToDec(hex[i]) + hexToDec(hex, i - 1);
          Ответить
          • показать все, что скрытоТарас завидует, потому что не умеет так круто писать.
            Ответить
            • показать все, что скрытоТарас который раз бегает за платком, между тем минусуя комменты и пытаясь исправить конфуз. Ничего не выйдет, говно.
              Ответить
              • Оказывается, меня затроллили и довели до баттхёрта в ветке, в которую я ещё не заглядывал. Да, школьники - они такие тролли, они и не такое могут...
                Ответить
                • показать все, что скрытоПока тебя не было? А что за пидорас тогда минусует меня?
                  Ответить
                  • Это специально обученный отряд Тараса. Он им по 5 бананов в час платит чтоб они неугодные ему комменты минусовали.
                    Ответить
                    • я написал небольшую пукалку, которая от имени 11 виртуалов минусует любой пост или коммент :)
                      Ответить
                      • Довольно безумная идея. Получается, что при наличии злой воли и некоторого количества ботов можно угнать в /dev/null любой псто, скрывать все комменты, и кое-что ещё.
                        Такой вайпер может превратить уютненький говнокодик в гнездо порока и развратаодин большой тред зла.
                        Отсюда вывод - всякая карма противоестественна. Капча 6681 не даст соврать.
                        Ответить
                      • "dogmatic" - это таки ваш?..
                        Ответить
      • Жёсткий биндинг к кодам? Ты упоротый штоле?
        Ответить
        • Ой, а кто это написал? Точно не я. Порошок, уходи.
          Ответить
    • Что такое 48 и 65?
      Ответить
      • ascii-коды символов "0" и "a"

        Только я тупанул немного, там надо 55 ставить. Тогда:

        "a" - 55 = 65 - 55 = 10
        Ответить
        • Почему написано 65, а не ord('A')?
          Ответить
          • Нет такой функции ord.
            При использовании арифм. операций char автоматически переводится в тип другого операнда (float/int). Точнее, char x - int y определена как x:int - y
            Ответить
            • Поставлю вопрос по-другому: какого хуя ты используешь магические числа?!
              Ответить
              • Он упоротый.
                Ответить
                • Кто упоротый? Я упоротый? Смотри, как умею:

                  function Class(something) {
                  	if (this.Class)
                  		return new Class(something);
                  	this.something = something;
                  }
                  var o1 = Class(0),
                      o2 = new Class(0);
                  alert( [o1.something, o2.something] );
                  Ответить
              • Ты дебил блять, если бы код нуля был бы 666, я бы писал 666, но он равен 48 и я пишу 48.
                Ответить
                • Да ты же долбоёб. А код ещё какой-то хуйни ты тоже будешь учить наизусть, или всё-таки доверишь это дело компьютеру?
                  Ответить
                  • показать все, что скрытоЗнать ascii-коды символов (хотя бы некоторых) должен знать любой уважающий себя программист (делфятники не считаются по понятным причинам).
                    Ответить
                    • Знать коды? Во всех кодировках?

                      "Ну ты лол" (с) народное
                      Ответить
                    • Знать ascii-коды символов (хотя бы некоторых) должен знать любой уважающий себя КуЛьНыЙ ХаКеР (делфятники не считаются по понятным причинам).
                      Ответить
              • это кусочки недавно сожранного счастливого билета
                выходят наружу
                Ответить
    • Я на месте.
      Ответить
    • Хай всем! Єто я автор сего чуда. Вьі не поверите, но тогда я и действительно бьіл знаком с Дельфи около полугода. К сожалению, афтар сего поста не указал год єтого кода (2003-2004). GOTO я использовал, ибо так учили в универе. Сейчас бьі я написал гдето-так:
      function HexToInt(value: string): int
      begin
      result := StrToInt('$' + value);
      end;
      но на Дельфи уже не пишу давно. Да теперь, смотря на єнтот код действительно смешьно и стьідно :)
      Ответить
      • Ууу пяаазда рулю!
        Ответить
      • Нехай, наприклад, виконання програми розпочинається з того самого мiсця, де призупинилося.
        Ответить
      • Ни очень хороший подход.
        Вот, взято из SysUtils:

        function StrToInt(const S: string): Integer;
        var
        E: Integer;
        begin
        Val(S, Result, E);
        if E <> 0 then ConvertErrorFmt(@SInvalidInteger, [s]);
        end;

        функции Val как таковой в Delphi нет, Delphi само подставляет нужный вызов из System.pas исходя из типов переменных. Поискав в де-ЖУКЕРЕ находим что реально вызывается _ValLong, листинг смотри ниже:

        function _ValLong(const s: String; var code: Integer): Longint;
        var
        I: Integer;
        Negative, Hex: Boolean;
        begin
        I := 1;
        code := -1;
        Result := 0;
        Negative := False;
        Hex := False;
        while (I <= Length(s)) and (s[i] = ' ') do Inc(I);
        if I > Length(s) then Exit;
        case s[i] of
        '$',
        'x',
        'X': begin
        Hex := True;
        Inc(I);
        end;
        '0': begin
        Hex := (Length(s) > I) and (UpCase(s[I+1]) = 'X');
        if Hex then Inc(I,2);
        end;
        '-': begin
        Negative := True;
        Inc(I);
        end;
        '+': Inc(I);
        end;
        if Hex then
        while I <= Length(s) do
        begin
        if Result > (High(Result) div 16) then
        begin
        code := I;
        Exit;
        end;
        case s[i] of
        '0'..'9': Result := Result * 16 + Ord(s[i]) - Ord('0');
        'a'..'f': Result := Result * 16 + Ord(s[i]) - Ord('a') + 10;
        'A'..'F': Result := Result * 16 + Ord(s[i]) - Ord('A') + 10;
        else
        code := I;
        Exit;
        end;
        end
        else
        while I <= Length(s) do
        begin
        if Result > (High(Result) div 10) then
        begin
        code := I;
        Exit;
        end;
        Result := Result * 10 + Ord(s[i]) - Ord('0');
        Inc(I);
        end;
        if Negative then
        Result := -Result;
        code := 0;
        end;

        Ты действительно считаеш такой подход хорошим???
        Ответить
        • скажи мне, милый ребенок, почему ты изговнякал форматирование?
          Ответить
          • На работе, занят немного, спешил......
            Ответить
            • function StrToInt(const S: string): Integer;
              var
                E: Integer;
              begin
                Val(S, Result, E);
                if E <> 0 then ConvertErrorFmt(@SInvalidInteger, [s]);
              end;
              
              function _ValLong(const s: String; var code: Integer): Longint;
              {$IFDEF PUREPASCAL}
              var
                I: Integer;
                Negative, Hex: Boolean;
              begin
                I := 1;
                code := -1;
                Result := 0;
                Negative := False;
                Hex := False;
                while (I <= Length(s)) and (s[i] = ' ') do Inc(I);
                if I > Length(s) then Exit;
                case s[i] of
                  '$',
                  'x',
                  'X': begin
                         Hex := True;
                         Inc(I);
                       end;
                  '0': begin
                        Hex := (Length(s) > I) and (UpCase(s[I+1]) = 'X');
                  if Hex then Inc(I,2);
                       end;
                  '-': begin
                        Negative := True;
                        Inc(I);
                       end;
                  '+': Inc(I);
                end;
                if Hex then
                  while I <= Length(s) do
                  begin
                    if Result > (High(Result) div 16) then
                    begin
                      code := I;
                      Exit;
                    end;
                    case s[i] of
                      '0'..'9': Result := Result * 16 + Ord(s[i]) - Ord('0');
                      'a'..'f': Result := Result * 16 + Ord(s[i]) - Ord('a') + 10;
                      'A'..'F': Result := Result * 16 + Ord(s[i]) - Ord('A') + 10;
                    else
                      code := I;
                      Exit;
                    end;
                  end
                else
                  while I <= Length(s) do
                  begin
                    if Result > (High(Result) div 10) then
                    begin
                      code := I;
                      Exit;
                    end;
                    Result := Result * 10 + Ord(s[i]) - Ord('0');
                    Inc(I);
                  end;
                if Negative then
                  Result := -Result;
                code := 0;
              end;

              Так лучше?
              Ответить
              • "как было" - значительно лучше, чем "плохо"
                броланд истратил тыщи макако-часов на то, чтобы сырцы RTL выглядели прилично
                хайлайтер жжот, кстати
                Ответить
    • >из-за незнания особенностей языка.
      особенность №1:
      вызывает срачи в интернетах
      Ответить
    • Отличный тред, доставляет. Особенно тарас.
      Ответить
    • показать все, что скрытоvanished
      Ответить

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