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

    +89

    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
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    unit uIsPalindrome; 
      
    interface
      
    function IsPalindrome(const aString: string): Boolean; 
      
    implementation
      
    uses
           Spring.Collections 
         , {$IF CompilerVersion >= 230}System.{$IFEND}SysUtils 
         ; 
      
    function CleanString(const aString: string): string; 
    var
      C: char; 
    begin
      // Remove all non-alpha chars and make all lower case 
      // Spaces don't matter, so let's count only letters 
      Result := ''; 
      for C in LowerCase(aString) do
      begin
        if CharInSet(C, ['a'..'z', 'A'..'Z']) then
        begin
          Result := Result + C; 
        end; 
      end; 
    end; 
      
    function IsPalindrome(const aString: string): Boolean; 
    var
      Stack: IStack<Char>; 
      C: Char; 
      NoSpaces: string; 
      Temp: string; 
    begin
      NoSpaces :=  CleanString(aString); 
      
      Stack := TCollections.CreateStack<Char>; 
      for C in NoSpaces do
      begin
        Stack.Push(C); 
      end; 
      Temp := ''; 
      repeat
        Temp := Temp + Stack.Pop; 
      until Stack.Count = 0; 
      Result := Temp = NoSpaces; 
    end; 
      
    end.

    true java style...

    Запостил: d_dev, 10 Октября 2011

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

    • А сдохнет стек сам?
      Ответить
      • интерфейс, счетчик ссылок, не?
        Ответить
        • Ой, я буковку I не заметил. Тогда да.
          Интересно, когда же в Дельфи добавят механизм автодеструкторов более вменяемый, чем тормозные интерфейсы?
          Ответить
          • >Интересно, когда же в Дельфи добавят механизм автодеструкторов более вменяемый, чем тормозные интерфейсы?

            Не расстраивайтесь так. Майкрософт, наперекор стандарту С++, в новый 2011 компилятор добавила тормозные интерфейсы (:
            Ответить
          • >Интересно, когда же в Дельфи добавят механизм автодеструкторов более вменяемый, чем тормозные интерфейсы?
            Дельфи: 0
            ЦПП: 1
            Ответить
          • В каком это месте они тормознутые?
            Проблема интерфейсов не в тормознутости, а в том, что базовый интерфейс не пуст
            Ответить
    • [сode]def isPalindrome(s: String) = s.reverse == s[/code]
      не?
      Ответить
      • не. а пробелы, регистр?
        "А роза упала на лапу Азора". не прокатит
        Ответить
        • def isPalindrome(s: String) = {
              val normalized = s.toLowerCase.filter(!Character.isSpace(_))
              normalized.reverse == normalized
          }
          не?
          Ответить
    • > true java style
      public class Palindrome {
          public static boolean isPalindrome(String s) {
      	int l = s.length();
      	int n = l / 2;
      	for (int i = 0; i <= n; ++i) {
      	    if (s.charAt(i) != s.charAt(l - i - 1))
      		return false;
      	}
      	return true;
          }
      }
      Ответить
      • [patch]
         - int l = s.length();
         - 	int n = l / 2;
         - 	for (int i = 0; i <= n; ++i) {
         - 	    if (s.charAt(i) != s.charAt(l - i - 1))
         - 		return false;
         - 	}
         - 	return true;
         + 	return new StringBuilder(s).reverse().toString().equals(s);
        [/patch]
        Ответить
        • Спс :)
          Ответить
        • P.S. Зато мой вариант не требует выделения двух дополнительных буферов и выполняет в два раза меньше сравнений. За всё нужно платить... :)
          Ответить
      • на каждый чих создавать класс...
        Ответить
        • Думаю, код в топике компилируется. Чтобы мой компилировался, нужен класс.
          Ответить
        • > unit uIsPalindrome;
          ...
          > interface
          ...
          > implementation
          ...
          > end.

          На каждый чих создавать модуль?
          Ответить
          • кстати, вот эти interface и implementation тоже бесят, как в Си, "declare before use"
            Ответить
          • Казус в том, что гк писавший это еще и Spring.Collections подключил для стэка, хотя он там вообще никчему. Помоему человек джаваинфицирован на весь мозг...
            Ответить
            • в Apache Commons, если не ошибаюсь в классе StringUtils есть метод - isPalindrome.
              для тех кто не может в палиндромы.

              Если в делфи портировали не только спринг и Apache Commons, то....
              Ответить
              • Странно, если оно так. Мне не известно ни одного случая, где использовались палиндромы не только just for fun. Я ошибаюсь, или палиндромы, как совершенные числа - красивы, но совершенно бесполезны?
                Ответить
                • Детишки можно решить задачку по палиндромам на олимпиаде и выиграть железку или деньги. Польза очевидна :)
                  Ответить
            • Никто из моих знакомых java-разработчиков не стал бы реализовывать _это_ через стэк. Так что java тут не при чём.
              Ответить
    • function IsPalindrome(const A: string): Boolean;
      var s: string;
      begin
      s := UpperCase(ReplaceText(A, ' ', ''));
      Result := s = ReverseString(s);
      end;
      Ответить
      • Вот видите, от языка на самом деле мало что зависит.
        p.s. "А роза\t упала на\n лапу Азора"
        Ответить
        • К сожалению некотрые языки влияют на неокрепшие умы многих говнокодеров, и мы наверное в их числе
          Ответить
    • А при чём здесь Java?
      Ответить

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