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

    +100

    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
    function Encrypt(jstr: String): String;
    var
      I: Integer;
      A: Real;
    begin
      if Length(jstr) = 0 Then begin
        Result := '';
        Exit;
      end;
      A := 0;
        for I := 0 To Length(jstr) do
          A := A + (Ord(jstr[I]) * Pos(jstr[I],jstr)) / 33;
      Result := FormatFloat('0000000000.0000000000',A);
      if Pos(',',Result) > 0 then begin
        Insert('.',Result,Pos(',',Result));
        Delete(Result,Pos(',',Result),1);
      end;
    end;

    Запостил: bugmenot, 17 Ноября 2011

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

    • for I := 0 To Length(jstr) do
      ...Ord(jstr[i])...
      строки ведь индексируются с 1.
      интерeсно было бы посмотреть и на Decrypt :)
      Ответить
    • > for I...
      > ...Pos(jstr[i],jstr)

      Квадрат. Надеюсь, это всего лишь лаба?
      Ответить
      • может быть тут сложность не важна
        Ответить
        • То есть либо алгоритм дальше делает что-то, что работает за квадрат, и что уже не оптимизируется, либо это одноразовая программа для себя? Других случаев, когда сложность не важна, я не знаю.
          Случай ограничения на длину строки я не рассматриваю, потому что это Вася можно сказать "не использовать строки больше 100 символов", а Петя возьмёт, и забьёт на это.
          Ответить
          • млин, вчитайся в то что программа делает: она конвертит строку в число с плавающей запятой.

            а если ты в этом коде только квадрат заметил...
            Ответить
            • Я за шишками на деревьях не увидел леса. А шишки тут шикарные...
              Ответить
          • да например, в случае кодирования пароля
            Ответить
            • Сознательная пессимизация? А тупо таймер поставить?
              Ответить
              • зачем? в лом было что-то приличнее O(n^2) придумывать, когда это и не требуется в общем-то
                Ответить
    • в дополнение:
      1. Некорректная работа с DecimalSeparator.
      2. Обратное преобразование невозможно: "ABBBAA", "ABBABA" и "ABAABB" кодируются одинаково.
      3. Длинную строку кодирует с погрешностью.
      п. 2 и 3 спорны - не знаю задачу: кодирование или хеш?
      Ответить
      • > кодирование, хеш или просто говно?
        никто не знает, я нашел это на стековервловочке
        Ответить
        • > никто не знает, я нашел это на стековервловочке

          жуть. почему я и перестал читать вопросы там по популярным языкам программирования. благо перловцы там еще до такого не докатились.
          Ответить
    • > if Pos(',',Result) > 0 then begin
      > Insert('.',Result,Pos(',',Result));
      > Delete(Result,Pos(',',Result),1);
      > end;

      Для замены одного символа делать вставку и удаление - это феерический долбоебизм.
      Ответить
      • это вообще отдельная тема:)
        и искать запятую а не DecimalSeparator - ГК.
        Ответить
    • >
      Pos(jstr[i],jstr)

      Гениально!
      Ответить

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