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

    +4

    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
    typedef void proc();
    
    proc nop{}
    void swap(int *a, int *b) {*a^=*b^=*a^=*b;}
    
    void sort_(int *arr, unsigned len)
    {
        (proc*[]){nop, swap}[*arr > arr[1]](arr, arr+1);
        (proc*[]){nop, sort_}[len > 2](arr+1, len-1);
    }
    void sort(int *arr, unsigned len)
    {
        (proc*[]){sort_, nop}[len <= 1](arr, len);
        (proc*[]){nop, sort}[len > 2](arr, len-1);
    }

    По поводу апнутого #19105.
    Ветвление легко имитируеься массивом функий, цикол —– рукурсией. Получилось даже короче и понятнее чем обычный код.

    Запостил: Morgoth, 26 Декабря 2018

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

    • СЕО псто
      Ответить
    • То ли дело "C—–", в нём есть jump.
      Ответить
    • Кукареку:
      {$MODE OBJFPC}
      type
        proc1 = procedure(var x: array of integer);
        proc2 = procedure(var x, y: integer);
        generic swtable<T> = array[boolean] of T;
        generic P<T> = class(TObject) public class function switch(x: array of T): specialize swtable<T>; static; end;
        P1 = specialize P<proc1>;
        P2 = specialize P<proc2>;
      
      class function P.switch(x: array of T): specialize swtable<T>; begin switch := x end;
      
      procedure nop2(var x, y: integer); begin end;
      procedure swap(var x, y: integer); begin x := x xor y; y:= y xor x; x := x xor y end;
      
      procedure nop1(var arr: array of integer); begin end;
      
      procedure inner_sort(var arr: array of integer);
        begin
          P2.switch([@nop2, @swap])[arr[0] > arr[1]](arr[0], arr[1]);
          P1.switch([@nop1, @inner_sort])[length(arr) > 2](arr[1 .. High(arr)])
        end;
      
      procedure sort(var arr: array of integer);
        begin
          P1.switch([@inner_sort, @nop1])[length(arr) < 1](arr);
          P1.switch([@nop1, @sort])[length(arr) > 2](arr[0 .. High(arr) - 1])
        end;
      
      procedure print_array(arr: array of integer);
        var
          i: integer;
        begin
          for i := Low(arr) to High(arr) do Write(arr[i], ' ');
          Writeln
        end;
      
      var
        x : array[-2 .. 2] of integer = (100500, 265, 1488, 666, 13);
      begin
        sort(x);
        print_array(x)
      end.


      https://ideone.com/oVoyVb
      Ответить
      • Ну или так, чтобы не плодить лишних функций:
        type
          proc1 = procedure(var x: array of integer);
          proc2 = procedure(var x, y: integer);
          SW1 = array[boolean] of proc1;
          SW2 = array[boolean] of proc2;
        
        procedure nop2(var x, y: integer); begin end;
        procedure swap(var x, y: integer); begin x := x xor y; y:= y xor x; x := x xor y end;
        
        procedure nop1(var arr: array of integer); begin end;
        
        procedure inner_sort(var arr: array of integer);
          const
            switch1: SW2 = (@nop2, @swap);
            switch2: SW1 = (@nop1, @inner_sort);
          begin
            switch1[arr[0] > arr[1]](arr[0], arr[1]);
            switch2[length(arr) > 2](arr[1 .. High(arr)])
          end;
        
        procedure sort(var arr: array of integer);
          const
            switch1: SW1 = (@inner_sort, @nop1);
            switch2: SW1 = (@nop1, @sort);
          begin
            switch1[length(arr) < 1](arr);
            switch2[length(arr) > 2](arr[0 .. High(arr) - 1])
          end;
        
        procedure print_array(arr: array of integer);
          var
            i: integer;
          begin
            for i := Low(arr) to High(arr) do Write(arr[i], ' ');
            Writeln
          end;
        
        var
          x : array[-2 .. 2] of integer = (10500, 265, 1488, 666, 13);
        begin
          sort(x);
          print_array(x)
        end.
        Ответить
        • Да ты петух!
          Ответить
          • Зато у меня более строгая проверка типов.

            typedef void proc(); позволяет ошибочно передать функцию, требующую другого количества аргументов, и поломать стек.
            Ответить
            • Это когда функцию по указателю вызываешь проверки нет, тайпдеф не пиридзёму.
              Стек не поломается, томушо cdecl, вот только если передать меньше аргументов чем надо может хуй пойми где отсортировать хуй пойми что.
              Ответить
        • паскаль? с генериками?
          на тебе дырявую тарелку за это
          Ответить
          • Что плохого?
            Ответить
          • Во Фрипаскакале есть ещё расширение objective. Ну чтобы писать под Кококококоа:
            https://www.freepascal.org/docs-html/current/ref/refse68.html

            NSView = objcclass external(NSResponder)  
            private  
              _subview  : id;  
            public  
              function initWithFrame(rect : NSRect): id;  
                 message ’initWithFrame:’;  
              procedure addSubview(aview: NSView);  
                 message ’addSubview:’;  
              procedure setAutoresizingMask(mask: NSUInteger);  
                 message ’setAutoresizingMask:’;  
              procedure setAutoresizesSubviews(flag: LongBool);  
                 message ’setAutoresizesSubviews:’;  
              procedure drawRect(dirtyRect: NSRect);  
                 message ’drawRect:’;  
            end;
            Ответить
            • нипонял
              они все .h файлы перевели на поскаль?
              Ответить
              • Как догадался?

                unit CocoaAll;
                
                {$mode delphi}
                {$modeswitch objectivec1}
                {$modeswitch cvar} { for "external" after the semi-colon with external vars }
                {$packrecords c}
                
                interface
                
                uses 
                  ctypes,
                  AEDataModel,IconsCore,
                  CFBase, CFArray, CFBag , CFCharacterSet, CFData, CFDate, CFDictionary, CFNumber ,CFPropertyList, CFSet, CFString, CFStringEncodingExt, CFTimeZone, CFTree, CFURL, CFXMLNode, CFXMLParser, CFMachPort, CFMessagePort, CFRunLoop, CFSocket, CFBinaryHeap, CFBitVector, CFBundle, CFByteOrders, CFPlugIn, CFPreferences, CFURLAccess, CFUUID, CFLocale, CFStream, CFDateFormatter, CFNumberFormatter, CFCalendar, CFUserNotification, CFNotificationCenter, CFAttributedString, CFNetworkErrorss,
                  CGBase, CGAffineTransforms, CGBitmapContext, CGColor, CGColorSpace, CGContext, CGDataConsumer, CGDataProvider, CGDirectDisplay, CGDirectPalette, CGDisplayConfiguration, CGDisplayFades, CGErrors, CGEvent, CGEventSource, CGEventTypes, CGFont, CGFunction, CGGLContext, CGGeometry, CGImage, CGLayer, CGPDFArray, CGPDFContentStream, CGPDFContext, CGPDFDictionary, CGPDFDocument, CGPDFObject, CGPDFOperatorTable, CGPDFPage, CGPDFScanner, CGPDFStream, CGPDFString, CGPSConverter, CGPath, CGPattern, CGRemoteOperation, CGSession, CGShading, CGWindowLevels,
                  CVBase,CVImageBuffer,
                  IOSurfaceAPI,
                  SecBase, SecTrust,
                  MacTypes, MacOSXPosix,
                  macgl, CGLTypes,
                  AnonClassDefinitionsQuartzcore;
                  
                {$linkframework Cocoa}
                {$define INTERFACE}
                
                {$include UndefinedTypes.inc}
                // also includes the ones for foundation and appkit
                {$include quartzcore/AnonIncludeClassDefinitionsQuartzcore.inc}
                
                {$define HEADER}
                {$include foundation/Foundation.inc}
                {$include quartzcore/QuartzCore.inc}
                {$include appkit/AppKit.inc}
                {$undef HEADER}
                
                {$define TYPES}
                {$include foundation/Foundation.inc}
                {$include quartzcore/QuartzCore.inc}
                {$include appkit/AppKit.inc}
                {$undef TYPES}


                Дальше не влезает.
                Ответить
                • почему на свифте не писать то?
                  Ответить
                  • Чтобы ты спросил!
                    Ответить
                    • Кроме шуток

                      Ябло дает тебе
                      1) копулятор
                      2) фреймворки (фундейшены)
                      3) документацию
                      4) IDE (хэ код)
                      5) конечное устройство
                      6) ос

                      Все это от одного вендора и довольно сильно документировано и интегрировано, логично предположить что это более стабильное решение чем поскаль

                      Я еще понимаю почему может хотеца писать паскалем а не обжсями, но свифт то всяко не хуже
                      Ответить
              • Вот ещё кусочек:
                { Parsed from Foundation.framework NSURL.h }
                
                {$ifdef TYPES}
                {$ifndef NSURL_PAS_T}
                {$define NSURL_PAS_T}
                
                { Constants }
                
                { Types }
                type
                  NSURLBookmarkCreationOptions = NSUInteger;
                  NSURLBookmarkCreationOptionsPtr = ^NSURLBookmarkCreationOptions;
                  NSURLBookmarkResolutionOptions = NSUInteger;
                  NSURLBookmarkResolutionOptionsPtr = ^NSURLBookmarkResolutionOptions;
                  NSURLBookmarkFileCreationOptions = NSUInteger;
                  NSURLBookmarkFileCreationOptionsPtr = ^NSURLBookmarkFileCreationOptions;
                
                {$endif}
                {$endif}
                Ответить
                • надеюсь они все фундейшены руками перевели!
                  Ответить
                  • To build the iOS Objective-Pascal headers (only supported for the iOS 3.2 SDK headers at this time, other SDK versinos will probably result in errors and require manual modification),
                    1) cd to the directory which contains parser.php (the current directory)
                    2) ./make-ios-headers.sh

                    The built headers will be placed under uikit-skel/src.


                    А теперь барабанная дробь! Кусочек из make-ios-headers.sh:
                    # convert uikit and related framework headers
                    php parser.php -objp -all -frameworks=foundation,quartzcore,opengles,uikit -root=`pwd`/uikit-skel/src -framework_path="$SDKBASEPATH"/System/Library/Frameworks


                    parser.php инклюдит objp.php на 3800 строк.

                    Именно поэтому...
                    Ответить
                    • >> iOS 3.2 SDK
                      ахахахахахахахаха
                      php, надеюсь, четвертый?

                      Доречи, угадай на каком языке писан манагер зависимостей для разработки под ios?
                      Ответить
                      • В другой директории уже упоминается iOS 4.2. Они даже поленились синхронизировать документацию.
                        Ответить
                        • все-то 10 лет прошло
                          Ответить
                          • Они не торопятся. Вдруг «Яблоко» сгниёт, а они зря силы потратили на перевод актуальных версий?
                            Ответить
                            • на всякий случай напомню что cocoa pods написан на .. ruby
                              Ответить
                              • Кстати, Ruby 2.6 таки вышел, но бинарник ещё не выложили. Нужно кококококонпелировать самим.
                                Ответить
                                • на юниксе обычно это не сложно:)

                                  руби все таки очень красивый язык, даже не смотря на то, что внизу каждого файла нас неминуемо ждет
                                  end
                                       end
                                      end
                                     end
                                    end
                                  end
                                  Ответить
                                • >>JIT [Experimental]
                                  кажется одно зеленое земноводное только что смачно.. как бы это сказать... смоктануло

                                  не?
                                  pypy
                                  Ответить
                                • Какая версия вашего ебаного руби идет на xp?
                                  Ответить
                                  • наш прекрасный руби не работает наёбаном XP которым пользуются только калеки
                                    Ответить
                                  • Давай я погуглю за тебя:
                                    https://github.com/oneclick/rubyinstaller/issues/271

                                    Официально — 2.0.

                                    Неофициально — можно попробовать собрать что-нибудь и поновее.
                                    Ответить
                                    • А где там твой соус? И почему это не написано на оффсайте, как для питона?
                                      На 2.0 gem install вываливается с ошибкой TLS.
                                      Ответить
                                      • Логично же! У тебя старая версия openssl, куд-кудах!
                                        Попробуй gem install openssl. Ох, щи!

                                        Сам на такое натыкался. Гугли, как скачать из репозитория новый гем с openssl.
                                        Ответить
                                        • ща начнется вой про прыщеговно
                                          Ответить
                                          • Я не в курсе про прыщи, но что говно - это точно.
                                            Ответить
                                            • руби это драгоценный камень

                                              а говно это тот, у кого WindowsXP в 2018г
                                              Ответить
                                              • Если я говно назову рубином - ты его сожрешь? Почему я должен где-то выискивать какая последняя версия идет на такой-то версии оси?
                                                Ответить
                                                • мне совершенно всё равно что ты и чем называешь

                                                  ты пустое место, и твое мнение не имеет значения ни для кого, кроме твоей мамы
                                                  Ответить
                                                  • И ты пришел сюда специально чтобы написать как я тебе безразличен? Пшел нахуй, убожество!
                                                    Ответить
                                          • Смотри, что нашёл:
                                            https://stackoverflow.com/questions/20762369/force-rubygems-to-use-http

                                            Чувак спрашивает, как получить доступ к rubygems по HTTP, потому что по HTTPS на его Макбуке с 2,9 ГГц получается хуёвый пирфоманс.
                                            Ответить
                                            • Я видел как в рассылке опенбзды чувак спрашивал как получить доступ к зеркалу пакетов на ftp, потому что чувак из Украины, ближайшее зеркало к нему на Яндексе, а Янедекс в Украине забанен по HTTP, но не по FTP.

                                              Тео ответил что FTP больше не поддердживается
                                              Ответить
                                              • А вручную зеркало нельзя выбрать? И почему в бане весь яндекс, а не только поисковик?
                                                Ответить
                                                • Потому что с точки зрения украинской политики «Яндекс» — компания страны-агрессора.
                                                  Ответить
                                                  • Почему бы не забанить все айпи страны-агрессора?
                                                    Ответить
                                                    • Это довольно сложно, придется регулярно грепать хуизную базу RIPEа
                                                      Ответить
                                                    • У вас же пытались, и как, получилось?
                                                      Ответить
                                                      • https://www.fontanka.ru/2018/12/25/092/
                                                        Ответить
                                                      • У нас до сих пор трафик между Москвой и Питером ходит через Стокгольм. Я серьёзно, могу даже выхлоп tracert показать.

                                                        Если банить зарубежные айпишники, вся сеть распадётся.

                                                        Министр связи предлагал запретить транзит внутригосударственного трафика через зарубежные линии, но на реализацию этого проекта нужны тонны нефти.
                                                        Ответить
                                                        • В кетае фаерволл встроили в самом начале строительста местного инета.
                                                          Ответить
                                                        • Это еще со времен "пиринговых войн" пошло. Не все со всеми хотят пирица, иногда дешевле и проще сделать это через спринт например
                                                          Ответить
                                                  • Там и не было цели забанить все руснявое. В бан хотели отправить основные рассадники ваты: ватноклассники, вконтакте. Вот за что яндекс туда я хз. Политика, что вы хотите. Хорошо хоть не получилось как в рашке с роскомпозором.
                                                    Ответить
                                                    • > Вот за что яндекс туда я хз.
                                                      Тем более, что Яндекс.карты правильно отображают принадлежность Крыма в зависимости от того, из какой страны смотрят карту.

                                                      > В бан хотели отправить основные рассадники ваты
                                                      Это реальная угроза была? Без этого бы к России возникли нежные чувства?
                                                      Ответить
                                                      • Интересно, как разные сервисы отображают Северный Кипр, Кашмир, Тайвань, Макао, Гонконг, Косово, Нагорный Карабах, Западную Сахару.
                                                        Ответить
                                                        • Макао это специальный административный регион КНР, как и Гонконг. Кто-то это оспаривает?

                                                          Кашмир и дефакто и деюре контролируется Индией не смотря на преобладание мусульманского населения, тяготеющего к Пакистану.

                                                          Тайвань признан многими странами, и обычно он все таки везде есть. КНР, в общем, даже не очень на это сердится. Ну то-есть это не так как было с ФРГ, которая автоматом рвала дипотношения со всеми кто признавал ГДР (исключение было сделано для ссср только).

                                                          А вот НКР, ПМР, СевКипр, Косово, Республику Сербску (внутри БиГ) и прочие ЛНР ДНР и Осетии с Абхазией, с ними конечно всё сложнее
                                                          Ответить
                                                      • Мне отсюда плохо видно что там у хохлов, но юго-восток очень ватный. Достаточно посмотреть за кого они голосовали.
                                                        Ответить
                                                        • Бан мейлру на ватность не влияет.
                                                          Они будут смотреть Первый Канал на ютюбе, читать Шария и Монтян в твитттере и какую-нить "русскую весну".

                                                          Забанив Яндекс и ВК Украина ничего не добилась в плане безопастности имхо
                                                          Ответить
                                              • Досадно, но за последнее время немало ресурсов на FTP закрылось. А жаль, ведь по FTP качать удобнее: никакого хлама в виде HTML-страниц, сразу список файлов; можно выкачивать целыми директориями.
                                                Ответить
                                                • >сразу список файлов
                                                  Это и на http есть

                                                  >можно выкачивать целыми директориями.
                                                  Это да, но зачем это надо?
                                                  Ответить
                                                  • >> Это и на http есть

                                                    Есть, если на сервере явно включен генератор списка файлов.
                                                    Ответить
                                                    • вообще мир развивается по спирали противозачаточной

                                                      сначала были специализированные протколы news, ftp, smtp, теперь всё заменили на веб морду, а потом поверх неепридумали rest api
                                                      Ответить
                                                    • Мы с тобой про репозитории говорим? Там он обычно включен.
                                                      Ответить
                                                • если бы еще FTP не требовал двух коннектов
                                                  Ответить
                                                  • Если бы еще FTP не требовал нового коннекта на каждый файл
                                                    Ответить
                                                    • Это не самый ад, unless ты не загружаешь 1024 файлика по 500 байт каждый
                                                      Ответить
                                                      • Это делает его практически непригодным даже при работе с насом в локалке. Про удаленный серв вообще молчу.
                                                        Ответить
                                            • Угу, помогло, спасибо. Правда, уже на другом месте сломалось.
                                              Ответить
                                          • The 'json' native gem requires installed build tools.

                                            ПРЫЩЕГОВНО! Ниасилили бинарники?
                                            Ответить
                                        • Оно вообще апдейтится отдельно от руби?
                                          Ответить
                                          • Мне в своё время (на Ruby 2.0 или 1.8, уже точно не помню) ручная доустановка нескольких пакетов помогла, gem install заработал.
                                            Ответить
                                            • >>1.8
                                              ничоси ты старый
                                              Ответить
                                              • А ты школьник? Я еще с питона 2.6 начинал. Тройка тогда еще альфой была.
                                                Ответить
                                                • ту би онест, про питона я услышал впервые в 2004 году, а про руби -- в 2006, уже вместе с рельсой.

                                                  Но руками их потрогал значительно позже
                                                  Ответить
                                                  • В 2010 году последний табун (stable) был версии 1.8.
                                                    Ответить
                                  • Кстати, посмотрел исходники этого вашего Ruby. Всё пестрит строчками такого вида:
                                    #if defined _WIN32 || defined __APPLE__


                                    Даже #ifdef __CYGWIN__ есть, хотя Сигвин вроде должен обеспечивать совместимость с POSIX.
                                    Ответить
                                    • костыли вы мои костыли

                                      позикс не всегда достаточен. Классический пример это kqueue в apple/bsd и epoll в ляликс
                                      Ответить
                    • https://github.com/graemeg/freepascal/blob/master/packages/cocoaint/utils/parser.php

                      break;
                      				
                      			case 'comments':
                      				$options[$key] = true;
                      				break;
                      			
                      			case 'docsets':
                      				$options[$key] = true;
                      				break;
                      			case 'merge':
                      				$options[$key] = true;
                      				break;
                      			case 'show':



                      https://searchcode.com/codesearch/view/5159224/
                      print("	! ".$method["def"]." already exists in ".$class["name"]." defined as ".$class["all"][$method["name"]]["def"]."\n");


                      сука
                      Ответить
                      • В нескольких местах явно не хватает тарасоформатирования.
                        Ответить
                        • Полезных утилиток тебе, беслптано
                          https://github.com/graemeg/freepascal/blob/master/packages/cocoaint/utils/source/utilities.php

                          function strtolowerref(&$str) {
                          	  $str = strtolower($str);
                          }
                          Ответить
                        • Ко—ко—ко! Куд—кудах! Куд—кудах—тах—тах!

                          Ку—ка—ре—ку—у!
                          Ответить
                          • I once saw this gem in a piece of C++ code: " #define private public ", just before including a header file. Someone who wants data that badly will find a means to get at it
                            Ответить
    • > proc nop{}
      блин, тсс меня испортил, в гсс так нэридзя.
      Ответить
    • * g o a t s e x * g o a t s e x * g o a t s e x *  
       g                                               g  
       o /     \             \            /    \       o  
       a|       |             \          |      |      a  
       t|       `.             |         |       :     t  
       s`        |             |        \|       |     s  
       e \       | /       /  \\\   --__ \\       :    e  
       x  \      \/   _--~~          ~--__| \     |    x  
       *   \      \_-~                    ~-_\    |    *  
       g    \_     \        _.--------.______\|   |    g  
       o      \     \______// _ ___ _ (_(__>  \   |    o  
       a       \   .  C ___)  ______ (_(____>  |  /    a  
       t       /\ |   C ____)/      \ (_____>  |_/     t  
       s      / /\|   C_____)       |  (___>   /  \    s  
       e     |   (   _C_____)\______/  // _/ /     \   e  
       x     |    \  |__   \\_________// (__/       |  x  
       *    | \    \____)   `----   --'             |  *  
       g    |  \_          ___\       /_          _/ | g  
       o   |              /    |     |  \            | o  
       a   |             |    /       \  \           | a  
       t   |          / /    |         |  \           |t  
       s   |         / /      \__/\___/    |          |s  
       e  |         / /        |    |       |         |e  
       x  |          |         |    |       |         |x  
       * g o a t s e x * g o a t s e x * g o a t s e x *
      Ответить

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