1. C++ / Говнокод #3589

    +189

    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
    for (int y=0; y<height; ++y)
    	{
    		int x=0;
    		dstp[x] = (srcp[x+4]*678 + srcp[x+3]*3902 + srcp[x+2]*13618 + srcp[x+1]*28830 + 
    				srcp[x]*18508 + 32768)>>16; ++x;
    		dstp[x] = (srcp[x+4]*678 + srcp[x+3]*3902 + srcp[x+2]*13618 + 
    			(srcp[x-1]+srcp[x+1])*14415 + srcp[x]*18508 + 32768)>>16; ++x;
    		dstp[x] = (srcp[x+4]*678 + srcp[x+3]*3902 + 
    			(srcp[x-2]+srcp[x+2])*6809 + (srcp[x-1]+srcp[x+1])*14415 + 
    			srcp[x]*18508 + 32768)>>16; ++x;
    		dstp[x] = (srcp[x+4]*678 + (srcp[x-3]+srcp[x+3])*1951 + 
    			(srcp[x-2]+srcp[x+2])*6809 + (srcp[x-1]+srcp[x+1])*14415 + 
    			srcp[x]*18508 + 32768)>>16;
    		for (x=4; x<width-4; ++x)
    		{
    			dstp[x] = ((srcp[x-4]+srcp[x+4])*339 + (srcp[x-3]+srcp[x+3])*1951 + 
    					(srcp[x-2]+srcp[x+2])*6809 + (srcp[x-1]+srcp[x+1])*14415 + 
    					srcp[x]*18508 + 32768)>>16;
    		}
    		dstp[x] = (srcp[x-4]*678 + (srcp[x-3]+srcp[x+3])*1951 + 
    				(srcp[x-2]+srcp[x+2])*6809 + (srcp[x-1]+srcp[x+1])*14415 + 
    				srcp[x]*18508 + 32768)>>16; ++x;
    		dstp[x] = (srcp[x-4]*678 + srcp[x-3]*3902 + 
    			(srcp[x-2]+srcp[x+2])*6809 + (srcp[x-1]+srcp[x+1])*14415 + 
    			srcp[x]*18508 + 32768)>>16; ++x;
    		dstp[x] = (srcp[x-4]*678 + srcp[x+3]*3902 + srcp[x-2]*13618 + 
    			(srcp[x-1]+srcp[x+1])*14415 + srcp[x]*18508 + 32768)>>16; ++x;
    		dstp[x] = (srcp[x-4]*678 + srcp[x-3]*3902 + srcp[x-2]*13618 + 
    			srcp[x-1]*28830 + srcp[x]*18508 + 32768)>>16;
    		srcp += pitch;
    		dstp += pitch;
    	}

    вот он - бесконстантый код

    Запостил: 3.14159265, 29 Июня 2010

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

    • Извините, но где?
      Ответить
      • что где?
        ясно ведь что автор ненавидит константы,
        вместо того чтобы создать константу или хотя бы переменную, он дублирует одни и те же значения кучу раз
        Ответить
        • Я имел ввиду -- где здесь С++...

          почему не надо писать в коде "srcp[x-4]*678 + srcp[x-3]*3902 + srcp[x-2]*13618" я и сам понимаю)
          Ответить
          • Боитесь, что Страйкер успел установить фильтр для автобана по комментарию: «Где здесь C++»?
            Ответить
          • Ещё раз повторяю, что для Си сейчас принято использовать стандарт С89, где нельзя объявнять переменную внутри скобок for?
            Ответить
            • И то правда. Переменные объявлять надо в начале, "(for int i" не сработает.
              Я на джаве слишком много пишу, извините
              Ответить
        • не факт. в некоторых прикладных облястях константы хорошо всем известны. если дать имя - то все начнут путатся. а напиши константу в живую - все разу понимают что это.

          например 39.37 никому ничего не говорит. а где я пару лет назад работал это было всем понятно: 39.37 = 1000мм/25.4мм и используется для конвертации из/в метров в/из дюймы. бо какое имя ей не давали, все путались.
          Ответить
        • А вдруг где-нибудь в начале завалялось:
          const unsigned a = 339;
          const unsigned a2 = a*2;
          //...
          #define 339 a;
          #define 678 a2;
          //...

          :-)
          Ответить
          • Передефайнить числа? И тогда компилятор будет выдавать, например, 2*2=5? Был идиотский фильм про юного гения. Автор фильма считал, что компьютерные вирусы именно так и работают. В том фильме ещё олимпиада была по скорости написания антивируса.
            Ответить
            • Не думаю, что в проекте так уж часто встречаются числа, содержащие последовательности цифр "18508" или "28830".
              Если совсем серьезно, то я пошутить хотел, о чем говорит смайл ":-)" в конце поста.
              Да и вообще, если в коде встретится число "339", то нет ничего страшного в том, что оно будет заменено на констатну "a", в результате чего получится не выражение 339*x, а выражение a*x, результат которого будет тем же самым.
              А в самом плохом случае, ежели в коде все-таки будет встречено 3395*x, то оно будет заменено препроцессором на a5*x, а это, скорее всего, распознается как необъявленный идентификатор, если вообще будет распознано.
              Ответить
              • Я и без смайла уловил интонацию.
                Для маленьких чисел проще писать цифры, а для больших лучше объявить константы. Если набрать 13618 более десяти раз, то можно и где-нибудь сбиться, а при опечатке в имени константы сразу ругнётся компилятор. Да и исправлять программу будет проще, если объявить константы.
                Ответить
            • Как фильм назывался? Хочу глянуть. :)
              Ответить
              • «Операция „Моцарт“», Франция, 1988. Последний раз я его смотрел лет пятнадцать назад, поэтому точность изложения не гарантирую.

                Там был момент, когда вундеркинд на нарисованной клавиатуре показывал взрослому товарищу, как набирать антивирус, чтобы тот смог победить в олимпиаде (судя по всему, специальной). Слабо выучить за день говнокод, не разбираясь в программировании?

                Похоже, что фильм создали спецслужбы специально для того, чтобы зрители не разбирались ни в каких технологиях. Как Вам сцена вымогания террористами рецепта антивещества у вундеркинда? А вообще зря я открыл эту тему. Ляпов, связанных с компьютерами, во всех фильмах хватает. Если обсуждать каждый такой фильм на говнокоде, то это будет похоже на спам. Вот если бы здесь был раздел «Говнокод в кино»...
                Ответить
                • А ещё какие фильмы про программистов и/или компьютеры есть?
                  Ответить
                  • Хоттабыч ;-D и ещё какой-то старый есть, забыл блин как называется :\
                    Ответить
                  • «Большое космическое путешествие». СССР, 1974.
                    Компьютер задаёт девочке квантовомеханическую капчу (это вам не какая-нибудь матановая!). Девочка (её роль сыграла известная пианистка Людмила Берлинская) хакнула компьютер, повернув отвёрткой подстроечный резистор на несколько градусов. В результате компьютер прочитал ответ задачи сам себе, и капча была пройдена!

                    «Фара». Казахстан, 1999. Банковская систем при запросе пароля показывает его длину! Правильным паролем был «bob», поэтому система отказалась принимать более 3 символов.

                    «Не родись красивой». Говносериал. Картина подбора пароля к Windows XP убивает.

                    «День рождения буржуя». Тот же жанр. Где здесь C++? Да местный программист наклепал за 10 минут программу, имитирующую банковские переводы. На экране чётко было видно тонны «cout <<».

                    «Парк юрского периода». Эксплоит «whterbbt.obj» (да здравствует файловая система 8.3!) отключает охранный контур по таймеру, чтобы программист успел стырить яйца динозавров. В книге напечатан исходник говнокода. Кстати, надо поискать!

                    Говорят, в фильме «Терминатор» был ассемблер для 6502. Кто работал на «Агате», поймёт, что это такое!

                    Про компьютеры много киношных глупостей, а вот код не во всяком фильме увидишь. Хорошо бы вспомнить, где именно код показывали.
                    Ответить
                    • «Парк юрского периода» есть на lib.ru: http://lib.ru/DETEKTIWY/KRAJTON/jurassic.txt
                      Легендарный код в тексте имеется!
                      Ответить
                      • Говноперевод детектед: "субпрограмма"
                        Ответить
                        • Я этот термин не только в художественной литературе видел. Иногда в переводной технической литературе можно увидеть термины и похуже.
                          Ответить
                    • А фильмы про это, но без киношных глупостей есть?

                      ps: Я про компы и программеров.
                      Ответить
                    • Чтож вы хотели... В советском союзе режисёры про компы не знали. Видили только в фантастических фильмах, снятыми ими же самими...
                      Ответить
                    • Ты где эту подборку откопал?
                      Ответить
                      • В недрах своей памяти. Могу назвать ещё несколько фильмов, но они к кодингу имеют меньшее отношение.
                        Ответить
                    • В довольно новом фильме "Немыслимое" (http://www.kinopoisk.ru/level/1/film/430519/)
                      в самом конце чел разминирует атомную бомбу. Эту процедуру он проводит с помощью
                      макбука, к крышке которого черным скотчем(!) приклеена неведомая хрень. На экране
                      ноута отчетливо виден эксель (или что там на маках), в который он вбивает (или просто
                      шлепает по клаве) что попало, вроде "jdfjkfhkfhskfksd" )) Это все отчетливо видно!
                      Ответить
                      • Это стеганография!
                        Там важны не символы, а промежутки между нажатиями на клавиши:)
                        Ответить
                      • Потому что хакеры так и работают, я это во многих фильмах видел: надо быстро-быстро долбать по клавиатуре. Тогда на экране начинают летать какие-то кубы, шары, и прочие объекты. Потом женский голос сообщает: доступ разрешен.

                        И все. Хакер сломал сеть, и может (например) управлять космическим кораблем.
                        Ответить
                        • ААА!!! У меня получилось! Сломал! Клавиатуру. Начали летать выдранные клавиши... Потом женский голос сообщил: "Ложись спать, придурок, 4 часа ночи уже!"
                          Ответить
                        • > надо быстро-быстро долбать по клавиатуре

                          И когда он нажимает на клавишу, компьютер обязательно пищит или ещё какой крутой звук издаёт.
                          И обязательно взлом идёт целых пять минут.

                          Но с другой сторон если бы было реально, было бы интересно необременённым умом зрителям смотреть на хакера, который пару часов молча изучает сорцы/документацию а потом ещё столько же дрочит на консоль и vim, через редкие интервалы прикасаясь к клавиатуре... А там ведь ещё за ними кто-нибудь обязательно гонится - сюжет не будет стыковаться :(...
                          Ответить
                          • http://forum.wec.ru/index.php?showtopic=19050
                            Ответить
                          • Точно, это как в БИ, то, что реально, то не зрелищно.
                            И наоборот.
                            Ответить
                        • а вот как оно на самом деле
                          http://ru.youtube.com/watch?v=XP34FHKleiY
                          Ответить
                    • http://lib.ololo.cc/i/12/107412/i_20.png
                      Ответить
                • Может ещё есть какие-нибудь фильмы про умных роботов или искуственный интелект?
                  Ответить
                  • AI Спилберга
                    Ответить
                  • ну вообще фильмов подобного рода оч. много, WebKill называет это CyperPank ))

                    сори за офтоп конечно

                    2001: Космическая одиссея - наикультовейший sci-fi фильм Кубрика
                    Версия 1.0
                    Кодер Винчензо Натали
                    Hardware (Марк 13)
                    Странные дни про запись ощущений на диски
                    Авалон
                    Прототип X29A
                    Гаттака - просто отличный фильм
                    Помутнение разума
                    Overdrawn at memory bank - весьма редкое кино
                    единственный линк на него
                    http%3A%2F%2Fthepiratebay.org%2Ftorrent% 2F3795755%2FOverdrawn_at_the_Memory_Bank _DVD_-_NOT_MSTied
                    итд...

                    я уже молчу о всем известных Матрице, Терминаторе и Хакерах
                    Ответить
                    • >Гаттака
                      Это про роботов? Где они там? Я конечно давно смотрел, но что-то не припомню... О_о
                      Ответить
                      • там их нет, но посмотреть стоит
                        я ж написал "просто отличный фильм"

                        короче вам сюда
                        http://vkontakte.ru/club296127
                        http://vkontakte.ru/club17944231
                        http://vkontakte.ru/club8770
                        Ответить
                  • Азимова лучше читай. Лучше всяких фильмов.
                    Ответить
                    • а как же Филипп К.Дик, автор Нейроманта Гибсон, Станислав Лем и другие?
                      Ответить
                      • И Стивенсон с потрясающим Snow Crash!
                        Ответить
            • Кто быстрее передифайнит числа обратно?

              На самом деле вирусы работают не так. Там появляется такой гигантский монстр, который ест цифры и буквы. А лечить вирус нужно так: телепортируешься в трехмерное пространство, там все зеленое и монстр этот бегает. Ты его убиваешь -- и спасаешь интернеты от вирусов.
              В кино всегда так показывают: я сам видел.
              Ответить
              • Ест цифры и буквы?
                Это пакман или питон?:)
                Ответить
                • http://upload.wikimedia.org/wikipedia/commons/b/b2/Foton.jpg

                  Интересно, а его на python написали?
                  Ответить
    • Ник автора в тему.
      Ответить
    • А чего код кстати делает (или должен делать) ?
      Похоже на какую-то аппроксимацию с весовыми коэффициентами.
      Ответить
      • Еще похоже на хитрый двумерный фильтр.
        Ответить
      • этот кусок - гаус-блюр,
        но это только часть более сложного фильтра на нейронных сетях, он-то кстати написан весьма неплохо.
        Ответить
        • обычно такое дело задается в матрицах 3х3, 5х5 - многие, думаю их видели в фотошопе,xnview или vdube
          в данном случае это 9х9
          Ответить
    • Только что с тренировки, поэтому прочитал «бесконтактный код».
      Много думал.
      Ответить
    • >вот он - бесконстантый код
      Я всегда пишу константный код, ибо самомодифицирующийся код - плохой тон.

      const CODESEG;бла бла бла
      Ответить
      • >>>Я всегда пишу константный код

        и это архиправильно, собственно, где-то тут было обсуждение о количестве милисекунд в неделе и проскользнула мысль - а нах нам константы?
        вот я и запостил, что будет если не юзать константы

        >>>Если набрать 13618 более десяти раз, то можно и где-нибудь сбиться. Да и исправлять программу будет проще, если объявить константы.

        золотые слова,
        вообще так оно всегда, когда код или логика дублируются
        Ответить
    • Сложная формула
      Ответить

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