Школоло / Говнокод #6689 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
Честно написано автором: Перегинец Иваном ( joni_lviv@ukr.net )

Запостил: miLord-Corwin miLord-Corwin, (Updated )

Комментарии (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 не даст соврать.
                      Ответить
      • Ой, а кто это написал? Точно не я. Порошок, уходи.
        Ответить
    • ascii-коды символов "0" и "a"

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

      "a" - 55 = 65 - 55 = 10
      Ответить
        • Нет такой функции 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:
    вызывает срачи в интернетах
    Ответить
  • Отличный тред, доставляет. Особенно тарас.
    Ответить
  • в?V!X I)G.M?GHM$E(F:X$VJ!GC?TF!X:S$R)JV"D?P(H?B?B:P)Z!B$P:M?U,Y"U(P:Z.M)P:N,D$U ZR QZ.T$T,T(T!U)Q"E(L)AD,DC"R?S:Y)F?T(I.R.X!W,P.EA)P,X:Q:Y"L,E"WO V?M(T MB!T S"D:C,OU.K)C:W$O)R:J(T!R.TQ?MU?L,P!Z"H(X"E$XAD?V)B$ZLU$ON?Z(Y:U?V,W(V.N.T?O)A?S Z GI$L:I(V$Q(C"S)A"C$T!I(JE)D"G:T$L!O"R?M A?R?U$I)Y W)Z,A.C!N"G,R$W(N"N"M,WG(C"O(Q!E"B)V!O"RB!S"P T?Y$V!U"K)S"Q"F,K$U(V L$D(R!KJ?D:N BХAOFJESYNKJAUDBWJRIURMVBGSTLZ
    Ответить

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

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8