1. Си / Говнокод #14248

    +143

    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
    const int index64[64] = {
        0,  1, 48,  2, 57, 49, 28,  3,
       61, 58, 50, 42, 38, 29, 17,  4,
       62, 55, 59, 36, 53, 51, 43, 22,
       45, 39, 33, 30, 24, 18, 12,  5,
       63, 47, 56, 27, 60, 41, 37, 16,
       54, 35, 52, 21, 44, 32, 23, 11,
       46, 26, 40, 15, 34, 20, 31, 10,
       25, 14, 19,  9, 13,  8,  7,  6
    };
     
    /**
     * bitScanForward
     * @author Martin Läuter (1997)
     *         Charles E. Leiserson
     *         Harald Prokop
     *         Keith H. Randall
     * "Using de Bruijn Sequences to Index a 1 in a Computer Word"
     * @param bb bitboard to scan
     * @precondition bb != 0
     * @return index (0..63) of least significant one bit
     */
    int bitScanForward(U64 bb) {
       assert (bb != 0);
       return index64[((bb & -bb) * 0x03f79d71b4cb0a89) >> 58];
    }

    нашёл на кывте

    Запостил: TarasB, 19 Декабря 2013

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

    • В HD такого полно.
      > de Bruijn Sequences
      Ну нормальный подход. Что плохого-то?
      На машинах где быстрое умножение (на x86 сейчас 4 такта+3 на выборку из таблицы) может быть быстрее чем двоичный поиск и ветвления:
      if (i == 0) return 32;
              int n = 31;
              y = i <<16; if (y != 0) { n = n -16; i = y; }
              y = i << 8; if (y != 0) { n = n - 8; i = y; }
              y = i << 4; if (y != 0) { n = n - 4; i = y; }
              y = i << 2; if (y != 0) { n = n - 2; i = y; }
              return n - ((i << 1) >>> 31);
      Ответить
      • High Density?
        Ответить
        • Hackers Delight
          Ответить
        • Hovno Development.

          http://www.hovno.sk/img/full/442.jpg
          Ответить
          • показать все, что скрытоУ меня один вопрос: зачем ты посещаешь такие сайты?
            Ответить
            • Лучшеб я туда не заходил и этого не видел. unsee();
              Ответить
              • VisualMemory.Delete(MemoryLocate.Last, new MemorySize(){Time = 5*60});
                Ответить
                • показать все, что скрыто>>VisualMemory.Delete(
                  Это в сишке-арестантке такая содомия?
                  Ответить
                  • Ага. Стардартная библиотека по работе с памятью. Наушники одеваешь, и правишь память. ..... Теперь я знаю конг-фу!
                    Ответить
                    • > Наушники одеваешь, и правишь память
                      Справа слышу шум гребных деструкторов. Нужно вызывать delete и лечь на дно.
                      Ответить
                      • Что я не поняль?
                        Ответить
                      • > Справа слышу шум гребных деструкторов.

                        Прямо по курсу стая мрачных темпорарий, капитан! Нужно как можно быстрее определить конструктор копирования, иначе не справимся!
                        Ответить
                        • показать все, что скрытоКапитан, в кормовом отсеке утечка памяти!
                          Ответить
                          • Вызывайте лейтенанта раии!
                            Ответить
                            • показать все, что скрытоЛейтенант Раии, вбегая в отсек, прокричал: "Якорь вам в глотку, срочно инкапсулируйте указатели! Иначе нам крышка".
                              Ответить
                              • О нет, кажется, глубина шаблонной рекурсии достигла критического значения! Нам все
                                submarine.cpp:12:14: error: template instantiation depth exceeds maximum of 1024
                                Ответить
                                • Да я тут вижу настоящих морских няшных котиковолков.
                                  -ftemplate-depth-XX
                                  Ответить
                              • показать все, что скрыто>>Иначе нам крышка"
                                Крышка была вчера, когда кое-кто советовал втыкать пайальник через кондер :)
                                Лепота )))
                                Ответить
                                • показать все, что скрыто
                                  Ответить
                                • показать все, что скрыто> когда кое-кто советовал втыкать пайальник через кондер
                                  Не советовал, а констатировал факт. Я действительно его так юзал (и многие другие тоже). Паяльник один хрен был на 220в, поэтому кондёр, с точки зрения безопасности, совершенно ничего не меняет. Хоть с ним может ёбнуть паяющего током, или пожечь паяемую схему, хоть без него.

                                  > ⍊
                                  Ну да, 24-36в с гальванической развязкой, термостабилизатором и ⍊ это идеал :)
                                  Ответить
                                  • показать все, что скрытоА смысл цеплять - чтобы избавиться от вихревых токов? ;) А если серьезно его через автотрансформатор нужно включать, если нужно понизить температуру, или цеплять поверх кожуха термореле. Бля, ради такого термореле когда то даже упиздил из школки старый электрочайник :)

                                    >>--|
                                    где ты видел, чтобы паяльник заземляли? Эх...
                                    Ответить
                                    • показать все, что скрыточто-бы избавиться от статического электричества, т.е. сравнять электрический потенциал паяющего и земли. Видители, некоторые электронные компоненты боятся статики.
                                      Ответить
                                      • показать все, что скрытоСлыхал, знаю. Электростатичекий браслет есть для этого: пластина такая, с тросиком. Цепляешь на руку, а на конце тросика зажим "крокодил" - его к батарее отопления или куда удобно. Но паяльник рисковано, на мой взгляд, заземлять. Хотя, дело хозяйское.
                                        Ответить
                                        • показать все, что скрытоБатарею отопления ни в коем случае нельзя использовать в качестве заземления, потому что между ней и землёй довольно высокое сопротивление. Измерь ради интереса разность потенциалов между батареей и оплёткой кабеля телевизионной антенны и удивись.

                                          Суть электростатического браслета не в том, чтобы заземлить руку, а в том, чтобы убрать разность потенциалов между рукой и электронными компонентами.

                                          А почему паяльник заземлять рискованно?
                                          Ответить
                                          • показать все, что скрыто>>Батарею отопления ни в коем случае нельзя использовать в качестве заземления

                                            Все верно. Заметьте, я не предлагал делать это.

                                            >>А почему паяльник заземлять рискованно?

                                            По причине банального херового качества.
                                            Ответить
                                            • показать все, что скрыто> банального херового качества
                                              Т.е. плохая изоляция? Так лучше пускай ток, утекающий через нее, идет через земляной провод, чем через плату и паяющего ;) Не согласен?
                                              Ответить
                                              • показать все, что скрытоКаким образом ток может утечь через плату и паяющего, если они изолированы от земли - паяльщик стоит голыми ногами на металлическом полу и держит паяльник за горячий кожух? А чтобы не пробить детали, тупо вырубить паяльник из сети, одеть браслет или хотя бы коснуться батареи, и запаять. Тонко? Тонко!
                                                Комар сломал свой нос
                                                Ответить
                                            • показать все, что скрытоОбычно вместе с предохранителями стоят УЗО, они при опасной утечке на землю (> 10mA) просто отрубят питание
                                              Ответить
                                        • показать все, что скрыто> Но паяльник рисковано, на мой взгляд, заземлять.
                                          Почему? Наоборот же. При пробое изоляции на нагревателе, ток уйдет не через паяемую тобой плату и тебя, а просто в заземление. А если паяльник все-таки гальванически развязан с сетью, то без заземления с него некуда будет стечь статике, кроме как через ни в чем не виноватую паяемую детальку, плату и твой заземленный браслет :P

                                          > автотрансформатор
                                          Та же дрянь, что и конденсатор. Не дает гальванической развязки. Тогда уж нормальный трансформатор с двумя обмотками.

                                          > где ты видел, чтобы паяльник заземляли?
                                          На любой паяльной станции, емнип, жало паяльника заземляется :) По крайней мере есть соответствующий болт и надпись в инструкции.
                                          Ответить
                                          • показать все, что скрыто>>А если паяльник все-таки гальванически развязан с сетью
                                            Это уже отдельная тема. Тогда да, можно заземлять.

                                            >>> автотрансформатор
                                            Та же дрянь, что и конденсатор. Не дает гальванической развязки
                                            А при чем тут гальваническая развязка?!
                                            http://govnokod.ru/14249#comment205403 - не ваш пост? Читайте вторую строчку.

                                            >>На любой паяльной станции
                                            Спустись на землю, бро. Лично у меня нет паяльной станции, но насколько знаю, там как раз таки есть гальв. развязка. Я говорю про обычные халтурные паяльники.
                                            Ответить
                                            • показать все, что скрыто> А при чем тут гальваническая развязка?!
                                              При том, что ни кондёр, ни автотрансформатор ее не дают.

                                              У автотрансформатора тут только один плюс - его можно понастраивать.

                                              > Читайте вторую строчку.
                                              Вот эту? "Ну гонял когда-то паяльник через кондёр, чтобы он не перегревался.". Ну да, обычный балластный конденсатор. Можно к лампочке подключить, чтобы тускнее горела. Можно к паяльнику, чтобы меньше грел. А рисковые китайцы даже юзают конденсаторные блок питания для зарядки дешевых фонариков...
                                              Ответить
                                              • показать все, что скрытоМожно проступить еще проще: залить в стакан воды, и добавить ложку-другую соли. Добавляя по ложкам соль, можно регулировать накал. Гламур бессмертен!
                                                Ответить
                                    • показать все, что скрытогде вы сдесь увидели вихревые токи, при подключении конденсатора).
                                      Ответить
                                    • показать все, что скрытоУ меня есть паяльник с евровилкой с заземлением. И толстенным трехжильным шнуром, хоть и относительно гибким, но весящим больше паяльника. Какое мудачье это придумало? :(
                                      Ответить
                                • показать все, что скрытоLispGovno начал отличную тему, а вы скатили её в унылый срач о том какой стороной лучше включать вилку паяльника в розетку переменного тока.
                                  Ответить
                                  • показать все, что скрытоИ вот, ты приебался сюда, чтобы сказать это?
                                    Иди ка ты на хуй!
                                    Ответить
                                  • показать все, что скрытоПлохо то, что он такой же упертый, как и я; оба остались при своем мнении, зачем еще нужно было доказывать что-то кому-то - непонятно.
                                    Ответить
                                    • показать все, что скрытоХейтеры лютуют
                                      Ответить
                                      • Это какой-то жест отчаяния или опять тест бота.
                                        У меня лютый баттхёрт перфекциониста от этих чисел. Сука, нельзя всем ровно по -15 или -20 дать, а не этот говённый глюкорандом разводить?

                                        И да, Стертору на заметку: после исправления этого рандома обязательно надо добавить кнопку "опустить до", которая включает только нужное количество ботов, чтобы у всех комментариев стояло одно число.
                                        Ответить
                                        • Это состояние гонки на самом сайте. У всех минусовавших стоит, что они голосовали, но не всем защитывается голос. Я даже случайно тасовал комментарии - не помогало.
                                          Ответить
                                          • >>не всем защитывается голос

                                            Потому, что выполняешь запросы с одного и того же IP.
                                            Ответить
                                        • procedure tmythread.execute;
                                          var
                                            i:integer;
                                          begin
                                            bot.postnumber:=topicno;
                                            bot.proxy:='220.181.89.72:8000';
                                            bot.login:=copy(vote,1,pos(':',vote)-1);
                                            bot.password:=copy(vote,pos(':',vote)+1,length(vote));
                                            case actiontype of
                                              ac_dec:
                                              begin
                                                bot.comment:=false;
                                                try
                                                  bot.connect;
                                                except
                                                  terminate;
                                                end;
                                                bot.VoteAgainst;
                                              end;
                                              ac_inc:
                                              begin
                                                bot.comment:=false;
                                                try
                                                  bot.connect;
                                                except
                                                  terminate;
                                                end;
                                                bot.VoteOn;
                                              end;
                                              ac_deccurrent:
                                              begin
                                                bot.comment:=true;
                                                try
                                                  bot.connect;
                                                except
                                                  terminate;
                                                end;
                                                bot.VoteAgainst;
                                              end;
                                              ac_inccurrent:
                                              begin
                                                bot.comment:=true;
                                                try
                                                  bot.connect;
                                                except
                                                  terminate;
                                                end;
                                                bot.VoteOn;
                                              end;
                                              ac_decall:
                                              begin
                                                bot.comment:=true;
                                                try
                                                  bot.connect;
                                                except
                                                  terminate;
                                                end;
                                                for i:=0 to clist.Count-1 do
                                                begin
                                                  bot.postnumber:=clist[i];
                                                  bot.VoteAgainst;
                                                end;
                                              end;
                                              ac_incall:
                                              begin
                                                bot.comment:=true;
                                                try
                                                  bot.connect;
                                                except
                                                  terminate;
                                                end;
                                                for i:=0 to clist.Count-1 do
                                                begin
                                                  bot.postnumber:=clist[i];
                                                  bot.VoteOn;
                                                end;
                                              end;
                                              ac_decallc:
                                                begin
                                                bot.comment:=true;
                                                try
                                                  bot.connect;
                                                except
                                                  terminate;
                                                end;
                                                for i:=0 to clist.Count-1 do
                                                begin
                                                bot.postnumber:=clist[i];
                                                bot.VoteAgainst;
                                                end;
                                              end;
                                              ac_incallc:
                                                begin
                                                bot.comment:=true;
                                                try
                                                  bot.connect;
                                                except
                                                  terminate;
                                                end;
                                                for i:=0 to clist.Count-1 do
                                                begin
                                                bot.postnumber:=clist[i];
                                                bot.VoteOn;
                                                end;
                                              end;
                                            end;
                                          end;


                                          Никакого глюкорандома нет - бот просто жмет на минусы, вот и все.
                                          Ответить
                                          • > Никакого глюкорандома нет - бот просто жмет на минусы, вот и все.
                                            На то он и глюкорандом, что возникает из-за глюка :) Но в итоге проблему сайта приходится решать создателю бота.
                                            Ответить
                                          • Копипаст мастер. Хеш функций сделать нельзя было?
                                            Ответить
                                            • Что-то не устраивает - пиши свой.

                                              Если кого-то покоробило вот это место:
                                              try
                                                      bot.connect;
                                                    except
                                                      terminate;
                                                    end;

                                              да, признаю, его можно один раз написать перед ветвлением. Всесте с тем повторю, исходники доступны - как вы их будете исправлять, что добавите, что вынесете - это уже ваша головная боль. я не буду его дальше разрабатывать.
                                              Ответить
                                              • type actionT = (ac_dec,ac_inc,ac_deccurrent,ac_inccurrent,ac_decall,ac_incall,ac_decallc,ac_incallc)
                                                ...
                                                procedure tmythread.execute;
                                                const 
                                                 Hash:array [actionT] of procedure = [bot.VoteAgainst,bot.VoteOn,bot.VoteAgainst, bot.VoteOn,bot.VoteAgainst,bot.VoteOn,bot.VoteAgainst, bot.VoteOn];
                                                var
                                                  i:integer;  
                                                begin
                                                  bot.postnumber:=topicno;
                                                  bot.proxy:='220.181.89.72:8000';
                                                  bot.login:=copy(vote,1,pos(':',vote)-1);
                                                  bot.password:=copy(vote,pos(':',vote)+1,length(vote));
                                                  bot.comment := (actiontype > ac_inc);
                                                  try
                                                    bot.connect;
                                                  except
                                                    terminate;
                                                  end;
                                                  if  (actiontype < ac_decall) then Hash(actiontype)
                                                 else
                                                   for i:=0 to clist.Count-1 do
                                                        begin
                                                          bot.postnumber:=clist[i];
                                                          Hash(actiontype);
                                                        end;
                                                end;
                                                Ответить
                                                • О нет. Дельфины на уютненьком!
                                                  Ответить
                                                  • Я не дельфин. Просто гугл умею юзать. Так я шарпорубист
                                                    Ответить
                                                • >>
                                                  const 
                                                   Hash:array [actionT] of procedure = [bot.VoteAgainst,bot.VoteOn,bot.VoteAgainst, bot.VoteOn,bot.VoteAgainst,bot.VoteOn,bot.VoteAgainst, bot.VoteOn];


                                                  Достойно отдельного гк)
                                                  Ответить
                                                  • с твоего кода скопипастил же
                                                    Ответить
                                                  • Так то я даже не смотрел, че ты там вызываешь. Выходит у тебя 2 последние пары вариантов одинаковые абсолютно лол

                                                    держи, не ной
                                                    type actionT = (ac_dec=0,ac_inc,ac_deccurrent,ac_inccurrent,ac_decall,ac_incall,ac_decallc,ac_incallc)
                                                    ...
                                                    procedure tmythread.execute;
                                                    var
                                                      i:integer;  
                                                      proc:procedure;
                                                    begin
                                                      bot.postnumber:=topicno;
                                                      bot.proxy:='220.181.89.72:8000';
                                                      bot.login:=copy(vote,1,pos(':',vote)-1);
                                                      bot.password:=copy(vote,pos(':',vote)+1,length(vote));
                                                      bot.comment := (actiontype > ac_inc);
                                                      if((ord(actiontype)mod 2)=0) then proc := bot.VoteAgainst else proc := bot.VoteOn;
                                                      try
                                                        bot.connect;
                                                      except
                                                        terminate;
                                                      end;
                                                      if  (actiontype < ac_decall) then proc
                                                     else
                                                       for i:=0 to clist.Count-1 do
                                                            begin
                                                              bot.postnumber:=clist[i];
                                                              proc;
                                                            end;
                                                    end;
                                                    Ответить
                                                    • Во это ты мне хочешь показать
                                                      http://stackoverflow.com/questions/3795047/array-of-procedures-inside-a-class-pointing-to-class-method

                                                      ?
                                                      Ответить
                                                      • неблагодарный ты дельфин. я тут из твоего говна конфетку слепил, а ты еще и возмущаешься
                                                        Ответить
                                                        • Это не больше, чем усложнение читабельности кода, мой сладкий, к тому же еще и не компилируется.
                                                          p/s/
                                                          Котом ты был приятнее.
                                                          Ответить
                                                          • Palmface.dpr
                                                            Ответить
                                                            • Да, это еще вопрос, кто кого куда склонит, ты меня в си#, или я тебя - в делфи.

                                                              p/s/
                                                              http://bbsimg.ngfiles.com/1/17858000/ngbbs4910e26a33eb9.jpg
                                                              Ответить
                                                              • Чувак, я так то на делфи кодил.

                                                                Ты надеешься меня переманить на делфи своим ужасным кодом?)
                                                                Ответить
                                                                • Нет, но я предлагаю тебе свою дружбу и духовную близость. Кстати, слово "чувак" явно не украшает твой лексикон. Избавляйся от него.
                                                                  Ответить
                                                                  • Для духовной близости у меня есть я, а для физической ты не годишься
                                                                    Ответить
                                                                    • Не льсти себе. Физическую я и не разделил бы с тобой.
                                                                      Ответить
                                                            • > kegdan 2 часа назад # −1
                                                              > Palmface.dpr
                                                              В чужом глазу соринку найдет, а в своем – пальмы не замечает.
                                                              Ответить
                                                              • То есть вы таки читаете, что восьмикратный копипаст - дело благородное?
                                                                Ответить
                                          • bot.login:=copy(vote,1,pos(':',vote)-1);
                                              bot.password:=copy(vote,pos(':',vote)+1,length(vote));


                                            bot.login, bot.password = vote.split(':')
                                            Ответить
                                            • ЭТО НЕ C#, анонимб.

                                              property Vote:string; [...]

                                              для того, чтобы вызывать медот split() нужно писать класс, содержащий такой метод. В Делфи строка не является объектом (хотя иногда ведет себя как объект), это просто массив символов.
                                              Ответить
                                              • Я знаю. Делфоёбы соснули (у вас вообще split нету?)
                                                Ответить
                                                • вот такого вызова метода нету
                                                  bot.password = vote.split(':')

                                                  но есть много, катастрофически много функций для работы со строками, так что, невелика потеря. вот например:
                                                  function StringField(text, delim: string; vilken: integer): string;
                                                  var
                                                    start, slut, I: integer;
                                                    temptext: string;
                                                  begin
                                                    start := 0;
                                                    if vilken > 0 then
                                                    begin
                                                      temptext := text;
                                                      if vilken = 1 then
                                                      begin
                                                        start := 1;
                                                        slut := pos(delim, text);
                                                      end
                                                      else
                                                      begin
                                                        for I := 1 to vilken - 1 do
                                                        begin
                                                          start := pos(delim, temptext) + Length(delim);
                                                          temptext := copy(temptext, start, Length(temptext));
                                                        end;
                                                        slut := pos(delim, temptext);
                                                      end;
                                                      if start > 0 then
                                                      begin
                                                        if slut = 0 then
                                                          slut := Length(text) + 1;
                                                        Result := copy(temptext, 1, slut - 1);
                                                      end
                                                      else
                                                        Result := text;
                                                    end
                                                    else
                                                      Result := text;
                                                  end;


                                                  или юзать родную ExtractStrings.
                                                  Ответить
                                                  • Эх, засиделся я с вами...Пойду кофе пить.
                                                    Всем сладких снов (а лучше вообще никаких). Удачи вам.
                                                    Ответить
                                                    • > Эх, засиделся я с вами...
                                                      Тебя переводят в отдельную камеру?
                                                      Ответить
                                                      • В вольер с пхпешниками
                                                        Ответить
                                                      • в отдельный класс
                                                        Ответить
                                                        • > в отдельный класс
                                                          В отдельный абстрактный класс.
                                                          Ответить
                                                          • рефакторинг прошел код-ревью, можно коммитить
                                                            Ответить
                                                            • мне незачем комитить, а стр - птица гордая - дятел
                                                              Ответить
                                                        • >>Тарасb
                                                          Из всех только ты один понял, что
                                                          Всем сладких снов (а лучше вообще никаких). Удачи вам

                                                          это вызов метода класса через дженерик.
                                                          Ответить
            • показать все, что скрытоУ меня встречный вопрос: какие такие сайты я посещаю? Кроссдоменный хотлинкинг никто не отменял.

              В копилку: http://ru.wiktionary.org/wiki/автоцистерна
              Ответить
            • показать все, что скрытоБлин чуть снова не зашел.
              Ответить
            • показать все, что скрыто> hovno
              > зачем ты посещаешь такие сайты?
              Написал человек на другом подобном сайте.
              Ответить
          • показать все, что скрытопо польски нибачу
            Ответить
      • показать все, что скрыто> 4 такта+3 на выборку из таблицы
        Ага, особенно если кешлиния с таблицей не загружена. А она довольно быстро станет не загруженной после прошлой загрузки.
        Ответить
        • Если уж мы настолько оптимизируем код, то он выполняется часто.
          Если уж он выполняется часто, то точно в цикле.
          Если он выполняется часто и в цикле - таблица после нескольких итераций по-любому будет в кеше.
          Ответить
      • Ни таблицы поиска, ни двоичный поиск тут не нужен.
        __builtin_clz
        _BitScanForward
        Ответить
        • А как же архитектуры, на которых таких инструкций нет? Для них вот как раз ifdef'ом можно включать этот метод.
          Ответить
          • gcc не делает эмуляцию на недоархретектурах?
            Ответить
            • Да делать то должен. Вот только насколько она там эффективна? Вдруг там вставится тупой цикл до 32?
              Ответить
              • > Вдруг
                А вдруг нет. Ты померил?
                Premature optimization is the root of all evil. Хуже оптимизации только оптимизация делающая деградейт производительности или добавляющая ошибки.
                Ответить
    • Какая пизда топит тред?
      Ответить

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