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

    +87

    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
    procedure GenerateMines; // Процедура генерации мин
    label
    again;
    var
    t,m:Integer; // Переменные для цикла
    i,j:Byte; // Координаты на поле
    bufer:String; // Вспомогательная переменная цикла. Хранит текущие сгенерированные координаты мины для записи в массив
    begin
    Randomize;
    for t:= 1 To mines Do
    begin
    again:
      i:=Round(Random*9+1);
      j:=Round(Random*9+1);
      bufer:=IntToStr(i) + ',' + IntToStr(j); // Создание строковой записи коордитаты мины
      for m:= 1 To 100 Do // Цикл для проверки, есть ли сгенерированная координата в массиве
      begin
        if bufer = mines_a[m] then goto again; // Если сгенерированная координата в массиве есть, то программа генерирует новые координаты
      end;
      mines_a[t]:=bufer; // Запись новой координаты в массив
      field[i,j]:=9; // Добавление мины на поле в сгенерированные координаты
    end;
    end;

    Процедура генерации мин в сапёре. Говно или не?

    Запостил: SmseR, 10 Января 2012

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

    • инденты бы раставить, а остально ок.
      Ответить
    • mines_a - Глобальный массив? - говно
      label again; - метка ? - говно

      да и вобще говно
      Ответить
    • Не говно. Нубоговно. См. коммент выше. mv GOTO /dev/ass
      Ответить
    • Назовите кол-во шагов, за которое алгоритм гарантировано завершит работу.
      Не трудитесь, я назову его за вас. Inf.

      > for m:= 1 To 100 Do // Цикл для проверки, есть ли сгенерированная координата в массиве

      Эпично. А if field[i,j]=9 не судьба взять.

      Короче, если бы я намеренно хотел намеренно написать как можно более говняный алгоритм генерации мин, то я бы примерно так и написал.
      Ответить
      • вот видимо не судьба.
        еще интересно: число возможных полей для мин 9х9, а в строке 16 говноконстанта (я уж не говорю про "1 to t-1") 100.
        Ответить
      • у меня генерируется мгновенно даже если выбрать 99 мин
        Ответить
        • Сделай поле 1000 на 1000.
          Ответить
          • "Stack overflow" :(
            Ответить
          • Но я не видел чтоб кто-то играл на поле хотябы больше, чем 30x30
            Ответить
            • Чтобы понять, что твой алгоритм никуда не годится, его надо прогонять на числах, сильно превышающих те, с которыми придётся работать.
              Ответить
              • >на числах, сильно превышающих те, с которыми придётся работать.

                Вспомнился O(1)
                Ответить
                • Джва стека?
                  Да, алехуя мы довольно грубо выгнали. А он просто всего лишь тупил, он хотя бы не говнился.
                  Ответить
                  • Кстати, может это алехуй никуда не уходил.

                    И вообще он - мудень, если ты забыл:
                    http://govnokod.ru/user/4367/codes
                    Ответить
                    • Мудак лучше, чем пидор.
                      Мудак это вообще почти не оскорбление.
                      Ответить
                    • алехуй вон он, старается
                      http://govnokod.ru/9068
                      Ответить
              • вообще хорошо тестить на граничных значениях. вон, например, в алгоритме бинарного поиска один баг (нахождения среднего двух чисел) существовал 10 лет во всех реализациях
                Ответить
                • какой баг?
                  Ответить
                  • ну тот, что (a+b)\2 может вдруг случиться переполнение
                    Ответить
                    • А, да, в самом деле. Но где списки такой длины бывают.
                      Ответить
                      • ну в общем, это еще в "Идеальном Коде" писалось
                        Ответить
                        • >в "Идеальном Коде" писалось
                          У, максималисты, хуле. Дайте максималисту возможность он бы и бабу в идеальную форму перелепил - в сиську
                          Ответить
                        • А если написать a+(b-a)/2 то будет ошибка при очень отрицательном a и очень положительном b
                          Таким образом, надо писать так:

                          if a<0 then (a+b)/2 else a+(b-a)/2;
                          Ответить
                          • (a + b) >> 1
                            В жабе (a + b) >>> 1
                            Ответить
                            • Беззнаковым сдвигом?
                              А если обе границы отрицательны?
                              И исключение при целочисленном переполнении ты всё равно так не обойдёшь.
                              Ответить
          • ну и? вероятность генерации 2-х мин в1 клетке уменьшится же
            Ответить
            • Ясен пень, с той же плотностью мин.
              Вообще в сапёрах надо чтобы пользователь вводил не число мин, а плотность, это более ощутимый параметр.
              Ответить
              • вероятность нахождения мины в клетке? а там уж как повезет?
                Ответить
                • Я не понял, о чём ты.

                  Поле 10х10 при 20 минах это тяжело.
                  Поле 30х30 при 20 минах это халява.

                  Поле 10х10 при 20% плотности это тяжело.
                  Поле 30х30 при 20% плотности (это 180 мин) это ровно так же тяжело.

                  Поэтому чтобы пользователь не мучался с ручным умножением плотности на размер, лучше сразу дать ему вводить именно плотность.
                  Ответить
              • кстати кто-нибудь пробовал играть в сапера не ставя флажки мин в принципе (они поставятся сами после открытия последней свободной клетки)? мне это показалось веселее:)
                Ответить
                • Я впервые сапёра увидел на мелком мини-компе, типа Палма. И я изначально не умел ставить флажки.
                  Так что я пробовал.
                  Ответить
    • показать все, что скрытоПасцаль? А чо не посраль?
      Ответить
    • атцинити...
      Ответить

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