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

    +121

    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
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    procedure TForm1.Timer2Timer(Sender: TObject);
    begin
    image75.Visible:=false;image76.Visible:=false;
    image1.Visible:=true;image2.Visible:=true;image3.Visible:=true;
    image4.Visible:=true;image5.Visible:=true;image6.Visible:=true;
    image7.Visible:=true;image8.Visible:=true;image9.Visible:=true;
    image10.Visible:=true;image11.Visible:=true;image12.Visible:=true;
    image13.Visible:=true;image14.Visible:=true;image15.Visible:=true;
    image16.Visible:=true;image17.Visible:=true;image18.Visible:=true;
    image19.Visible:=true;image20.Visible:=true;image21.Visible:=true;
    image22.Visible:=true;image23.Visible:=true;image24.Visible:=true;
    image25.Visible:=true;image26.Visible:=true;image27.Visible:=true;
    image28.Visible:=true;image29.Visible:=true;image30.Visible:=true;
    image31.Visible:=true;image32.Visible:=true;image33.Visible:=true;
    image34.Visible:=true;image35.Visible:=true;image36.Visible:=true;
    image37.Visible:=true;image38.Visible:=true;image39.Visible:=true;
    image40.Visible:=true;image41.Visible:=true;image42.Visible:=true;
    image43.Visible:=true;image44.Visible:=true;image45.Visible:=true;
    image46.Visible:=true;image47.Visible:=true;image48.Visible:=true;
    image49.Visible:=true;image50.Visible:=true;image51.Visible:=true;
    image52.Visible:=true;image53.Visible:=true;image54.Visible:=true;
    image55.Visible:=true;image56.Visible:=true;image57.Visible:=true;
    image58.Visible:=true;image59.Visible:=true;image60.Visible:=true;
    image61.Visible:=true;image62.Visible:=true;image63.Visible:=true;
    image64.Visible:=true;image65.Visible:=true;image66.Visible:=true;
    image67.Visible:=true;image68.Visible:=true;image69.Visible:=true;
    image70.Visible:=true;image71.Visible:=true;image72.Visible:=true;
    image73.Visible:=true;
    if image1.left<360 then begin timer2.Enabled:=false;button2.Visible:=true;
    image1.Visible:=false;image2.Visible:=false;image3.Visible:=false;
    image4.Visible:=false;image5.Visible:=false;image6.Visible:=false;
    image7.Visible:=false;image8.Visible:=false;image9.Visible:=false;
    image10.Visible:=false;image11.Visible:=false;image12.Visible:=false;
    image13.Visible:=false;image14.Visible:=false;image15.Visible:=false;
    image16.Visible:=false;image17.Visible:=false;image18.Visible:=false;
    image19.Visible:=false;image20.Visible:=false;image21.Visible:=false;
    image22.Visible:=false;image23.Visible:=false;image24.Visible:=false;
    image25.Visible:=false;image26.Visible:=false;image27.Visible:=false;
    image28.Visible:=false;image29.Visible:=false;image30.Visible:=false;
    image31.Visible:=false;image32.Visible:=false;image33.Visible:=false;
    image34.Visible:=false;image35.Visible:=false;image36.Visible:=false;
    image37.Visible:=false;image38.Visible:=false;image39.Visible:=false;
    image40.Visible:=false;image41.Visible:=false;image42.Visible:=false;
    image43.Visible:=false;image44.Visible:=false;image45.Visible:=false;
    image46.Visible:=false;image47.Visible:=false;image48.Visible:=false;
    image49.Visible:=false;image50.Visible:=false;image51.Visible:=false;
    image52.Visible:=false;image53.Visible:=false;image54.Visible:=false;
    image55.Visible:=false;image56.Visible:=false;image57.Visible:=false;
    image58.Visible:=false;image59.Visible:=false;image60.Visible:=false;
    image61.Visible:=false;image62.Visible:=false;image63.Visible:=false;
    image64.Visible:=false;image65.Visible:=false;image66.Visible:=false;
    image67.Visible:=false;image68.Visible:=false;image69.Visible:=false;
    image70.Visible:=false;image71.Visible:=false;image72.Visible:=false;
    image73.Visible:=false;end
    else begin image1.left:=image1.Left-3;image1.top:=image1.top-1;
    image2.left:=image2.Left+2;image2.top:=image2.top+2;
    image3.left:=image3.Left-1;image3.top:=image3.top-3;
    image4.left:=image4.Left-2;image4.top:=image4.top+4;
    ...

    Ещё 65 строк кода!
    Анимация взрыва на Delphi 7.

    Запостил: artar94, 24 Апреля 2012

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

    • А когда то такие люди были очень полезны обществу! Пирамиды там строить...
      Ответить
      • ... или БАМ'ы. Но проклятый антинародный режим...
        Ответить
    • Отличный код, жаль отступов нет, структура не просматривается.
      Ответить
    • Ура, говнокодик снова заработал
      Ответить
    • for i := 1 to 73 do FindComponent('image'+IntToStr(i)).Visib le := false;
      Ответить
      • Так неинтересно. Где простор для копипастатворчества?
        Ответить
      • на мейлрушку ответь, мне интересно сотрудничество по теме
        Ответить
      • Медленней работать будет. :)
        Ответить
        • И скорей всего на порядок. Т.к. поиск по имени вместо прямого доступа.
          Ответить
          • Доступ к компоненту по имени - операция не O(1)?
            Ответить
            • Каким образом FindComponent('image'+IntToStr(i)) станет О(1)? Ну опустим случай, что там хеш.
              Ответить
              • ТАМ НЕ ХЕШ ?!
                Ответить
                • а нахера там хещ?
                  Ответить
                • Вы не поверите, но там с вероятностью 0.999 тупой линейный поиск по массиву дочерних компонентов. Борланд же.
                  Ответить
                  • Ну вот, специально слазил в исходники RTL от Delphi 7:

                    function TComponent.FindComponent(const AName: string): TComponent;
                    var
                      I: Integer;
                    begin
                      if (AName <> '') and (FComponents <> nil) then
                        for I := 0 to FComponents.Count - 1 do
                        begin
                          Result := FComponents[i];
                          if SameText(Result.FName, AName) then Exit;
                        end;
                      Result := nil;
                    end;
                    Ответить
                    • лол, оно еще и не чуствительное к регистру
                      Ответить
                      • Итого тут имеем 73*(72/2) сравнений строк, что примерно равно 2628. Да и все строчки начинаются со слова image, так что особо быстро не сравнить.
                        Ответить
                      • Ну так в делфи всё нечуствительно…
                        Ответить
                    • печально всё это
                      Ответить
                    • Всегда знал, что там криворукие идиоты.
                      Хотя до адобе все-равно далеко.
                      Ответить
                      • в чем тут криворукость? FindComponent используется крайне редко, так что хеш не оправдан - память тут важнее. Если нужен перебор, то лучше юзать Components[] + ComponentsCount
                        Ответить
                        • Кстати да, в данной задаче важно все их скрыть\показать, порядок не имеет значения.
                          Ответить
                        • >в чем тут криворукость?
                          SameText (case insensitive)
                          Если уж заводишь какой-то ассоциативный массив, сделай так чтоб доступ по имени был быстрым.
                          >хеш не оправдан
                          Помимо хеш-мапов есть другие структуры - бинарные деревья, trie.
                          Ответить
                          • Аналогично. Если компонентов с однотипным смыслом на форме не более 10, то заморачиваться смысла нет, а если больше, то это уже кривой интерфейс.
                            Ответить
                    • Бугога. Умеют ведь, когда хотят, черти полосатые.
                      Видимо, для задач с тысячей одинаковых компонент придётся создавать массив указателей на компоненты, один раз циклом заполнять по findcomponent (ну не руками же), а потом по индексу фигачить. Альтернативы в голову не идут. Какие у кого ещё соображения?
                      Ответить
                      • Тысячу компонентов на форму ложить тяжко. Так что создавать в цикле, и сразу же складывать указатели в массив.
                        Ответить
                        • В принципе, это может быть генератор, но возражение принимается.
                          Ответить
                      • класть на форму тысячу компонент само по себе не гуд.
                        Ответить
                      • Я сколько помню есть либа называется KOL так как то все получше сделано. Во всяком случае приложение работает пошустрее. И размеры меньше.
                        Ответить
                    • Delphi XE2 - при першому запиті формується сортований список, а дальше бінарний пошук

                      function TComponent.FindComponent(const AName: string): TComponent;
                      var
                        I: Integer;
                      begin
                        Result := nil;
                        if (AName <> '') and (FComponents <> nil) then
                        begin
                          if FSortedComponents = nil then
                          begin
                            { Fill the sorted list (and sort it) }
                            FSortedComponents := TList.Create;
                            FSortedComponents.Count := FComponents.Count;
                            for I := 0 to FComponents.Count - 1 do
                              FSortedComponents[i] := FComponents[i];
                      
                            FSortedComponents.SortList(
                              function(Item1, Item2: Pointer): Integer
                              begin
                                Result := CompareText(TComponent(Item1).Name, TComponent(Item2).Name);
                              end);
                          end;
                          Result := FindSortedComponent(AName, I);
                        end;
                      end;
                      
                      function TComponent.FindSortedComponent(const AName: string; var Index: Integer): TComponent;
                      var
                        L, H, I, C: Integer;
                      begin
                        L := 0;
                        H := FSortedComponents.Count - 1;
                        while L <= H do
                        begin
                          I := (L + H) shr 1;
                          Result := TComponent(FSortedComponents.List[i]);
                          C := CompareText(Result.Name, AName);
                          if C < 0 then
                            L := I + 1
                          else
                          begin
                            H := I - 1;
                            if C = 0 then
                            begin
                              Index := I;
                              Exit;
                            end;
                          end;
                        end;
                        Index := L;
                        Result := nil;
                      end;
                      Ответить
                      • А при добавлении новых компонентов FSortedComponents очищается?
                        Ответить
                        • ні, звичайно, просто список пересортовується
                          Ответить
                  • Ну в целом и общем ты не прав, например. Но в данном конкретном случае ты внезапно оказался прав, да, писец какой-то.
                    Ответить
    • Вы ничего не понимаете, это же porticle sistem!
      Ответить

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