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

    +136

    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
    typedef char C;typedef long I;
    typedef struct a{I t,r,d[3],p[2];}*A;
    #define P printf
    #define R return
    #define V1(f) A f(w)A w;
    #define V2(f) A f(a,w)A a,w;
    #define DO(n,x) {I i=0,_n=(n);for(;i<_n;++i){x;}}
    I *ma(n){R(I*)malloc(n*4);}mv(d,s,n)I *d,*s;{DO(n,d[i]=s[i]);}
    tr(r,d)I *d;{I z=1;DO(r,z=z*d[i]);R z;}
    A ga(t,r,d)I *d;{A z=(A)ma(5+tr(r,d));z->t=t,z->r=r,mv(z->d,d,r);R z;}
    V1(iota){I n=*w->p;A z=ga(0,1,&n);DO(n,z->p[i]=i);R z;}
    V2(plus){I r=w->r,*d=w->d,n=tr(r,d);A z=ga(0,r,d);
     DO(n,z->p[i]=a->p[i]+w->p[i]);R z;}
    V2(from){I r=w->r-1,*d=w->d+1,n=tr(r,d);
     A z=ga(w->t,r,d);mv(z->p,w->p+(n**a->p),n);R z;}
    V1(box){A z=ga(1,0,0);*z->p=(I)w;R z;}
    V2(cat){I an=tr(a->r,a->d),wn=tr(w->r,w->d),n=an+wn;
     A z=ga(w->t,1,&n);mv(z->p,a->p,an);mv(z->p+an,w->p,wn);R z;}
    V2(find){}
    V2(rsh){I r=a->r?*a->d:1,n=tr(r,a->p),wn=tr(w->r,w->d);
     A z=ga(w->t,r,a->p);mv(z->p,w->p,wn=n>wn?wn:n);
     if(n-=wn)mv(z->p+wn,z->p,n);R z;}
    V1(sha){A z=ga(0,1,&w->r);mv(z->p,w->d,w->r);R z;}
    V1(id){R w;}V1(size){A z=ga(0,0,0);*z->p=w->r?*w->d:1;R z;}
    pi(i){P("%d ",i);}nl(){P("\n");}
    pr(w)A w;{I r=w->r,*d=w->d,n=tr(r,d);DO(r,pi(d[i]));nl();
     if(w->t)DO(n,P("< ");pr(w->p[i]))else DO(n,pi(w->p[i]));nl();}
    
    C vt[]="+{~<#,";
    A(*vd[])()={0,plus,from,find,0,rsh,cat},
     (*vm[])()={0,id,size,iota,box,sha,0};
    I st[26]; qp(a){R a>='a'&&a<='z';}qv(a){R a<'a';}
    A ex(e)I *e;{I a=*e;
     if(qp(a)){if(e[1]=='=')R st[a-'a']=ex(e+2);a= st[ a-'a'];}
     R qv(a)?(*vm[a])(ex(e+1)):e[1]?(*vd[e[1]])(a,ex(e+2)):(A)a;}
    noun(c){A z;if(c<'0'||c>'9')R 0;z=ga(0,0,0);*z->p=c-'0';R z;}
    verb(c){I i=0;for(;vt[i];)if(vt[i++]==c)R i;R 0;}
    I *wd(s)C *s;{I a,n=strlen(s),*e=ma(n+1);C c;
     DO(n,e[i]=(a=noun(c=s[i]))?a:(a=verb(c))?a:c);e[n]=0;R e;}
    
    main(){C s[99];while(gets(s))pr(ex(wd(s)));}

    http://www.kuro5hin.org/story/2002/8/30/175531/763

    Taken from Roger Hui's An Implementation of J.

    One summer weekend in 1989, Arthur Whitney visited Ken Iverson at Kiln Farm and produced — on one page and in one afternoon — an interpreter fragment on the AT&T 3B1 computer. I studied this interpreter for about a week for its organization and programming style; and on Sunday, August 27, 1989, at about four o'clock in the afternoon, wrote the first line of code that became the implementation described in this document.

    Arthur's one-page interpreter fragment is as follows:

    Read inside for the most beautiful code you have ever seen.

    Запостил: bazhenovc, 12 Ноября 2012

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

    • Так этот J не только снаружи ебнутый, но и внутри!
      Ответить
      • Это не JБлядство, а JПринципы.
        Ответить
        • > JБлядство
          > JПринципы

          Я нашёл два языка, в которых заглавные буквы могут быть в середине слова: свати и зулу. Оба из группы банту нигеро-конголезской макросемьи. В языках, основанных на латинице, имена собственные из этих языков пишут с сохранением орфографии. Примеры топонимов:
          https://en.wikipedia.org/wiki/KaNgwane
          https://en.wikipedia.org/wiki/KwaZulu
          Ответить
          • > которых заглавные буквы могут быть в середине слова
            base64
            Ответить
            • Base64 придумали зулусы? Что ж Вы раньше молчали, Шмульке?
              Ответить
      • Всё логично, интерпретатор J выглядит как код на J.
        Ответить
    • Достали уже постить всякие произведения соревнующихся обфускаторов! Ясен пень, автор кода полностью отдавал себе отчёт, что пишет путаницу, иначе не делал бы typedef char C; и прочие.
      Одно дело постить говнорешения криворуких программистов - другое, постить такое вот творчество, которого на соотв. тематических сайтах навалом.
      Ответить
      • Судя по всему это продакшн код :) А автор - суровый математик.
        Ответить
    • показать все, что скрытоКакой багор )))
      Ответить
    • Гыгы, он сказал "хуй"! Гыгыгыгы...
      Ответить
    • Интерпретатор той же сишки намного длинее, нет?
      Надо бы врубиться в J, может не такой и плохой язык...
      Ответить
      • После него шаблонная магия будет казаться псевдокодом:)
        Ответить
    • Кто покажет этот код после раскрытия макросов и нормального форматирования? Действительно ли J такой простой для интерпретации язык?
      Ответить
      • interpreter fragment ;(
        Ответить
      • > Кто покажет этот код после раскрытия макросов и нормального форматирования?
        Пожалуйста: http://ideone.com/Ku1Wzi

        Выражаю благодарность astyle, cpp и vim без которых мне было бы влом копаться в этом говне великолепном коде.
        Ответить
        • >char s[99];
          Memory Corruption Friend.
          Ответить
          • Не ту строчку показал ;)

            > gets(s)
            Вот он корень зла.

            А на ход черных char s[99] у белых был хороший ответ fgets(s, 99, stdin).
            Ответить
            • Кроме заведения отдельной константы для длины массива - что не удобно
              или деления одного на другой сайзофа - что переодически врёт - есть нормальная функция для получения длинны массива в сишке?
              (В крестах нет, но пишется быстро).
              Ответить
              • > что переодически врёт
                Пример в студию.

                P.S. Кстати в случае с чарами делить на сайзоф не нужно. Т.к. по определению sizeof в стандарте sizeof(char) всегда возвращает 1.
                Ответить
                • Вот так без объявления войны в сишечке LengthOfArray начинает врать в рантайме (во ремя компиляции никак не обнаруживается):
                  http://ideone.com/3rffCa
                  Понятно, что ошибки новичка или большого проекта, где за всем не уследишь, но всеже было бы приятно, если бы обнаруживалось.
                  Кресты же здесь отличились и хорошо справляются:
                  http://ideone.com/aaxPUG
                  http://ideone.com/6WUTgE
                  http://ideone.com/bZC7H5
                  Ответить
                  • Потому что при вызове функции LengthOfArray произошло неявное приведение c[n] к c[].
                    Ответить
                    • Что я не так сказал?
                      Ответить
                      • ведь улыбка это флаг корабляя
                        занейтралил тебя
                        Ответить
                        • Ну я хоть и капитан, но гумну же видимо не очевидно, раз оно так удивляется.
                          Ответить
                        • > занейтралил
                          Нужен говнокод добра и толерастии. Можно плюсовать и минусовать, но карма остаётся 0, поскольку на каждый минус (или плюс) система отвечает асимметрично и сама.
                          В итоге, можно только узнать, скольким людям ты небезразличен.
                          Ответить
                          • >Нужен говнокод добра и толерастии.
                            Это говнокод нейтралитета.
                            Говнокод с добром и модтолерастией тут: habrahabr.ru/search/?q=Говнокод/
                            А у нас говнокод с поне, С++ и Тарасом.
                            Ответить
                            • > Здесь я допустил немного говнокода кода плохого качества
                              Ответить
                            • Пони - символ добра, а С++ - антипод пони, и, следовательно, символ зла?
                              Ответить
                              • Именно. Как инь и янь. А ты - уравновешивающий, нейтроллящий фактор, посередине.
                                Ответить
                              • антипод?
                                из себя и C++ ты выбрал невинную жертву, хотя ты сам же каментом ниже противопоставил себя пони


                                > TarasB Позавчера
                                Блин, я нихуя не пони(((
                                Ответить
                                • По сути термин крестодельфиний тарасуализм и есть такое вот двоемыслие. True - is false. Null - is not null. С++ is Delphi итд.
                                  Ответить
                                  • тем временем Тарас на гамедеве уже регулярно затыкает за пояс известного гуру сиплюсплюс, мы вырастили идеальное смертоносное оружие, господа
                                    Ответить
                                  • > NULL is nil
                                    Ответить
                        • > занейтралил тебя
                          тарас нас траллит
                          Ответить
                • bormand, defecate-plusplus, и если ещё остались умные люди, знающие си: процитирую себя, вопрос ещё в силе:
                  >Есть ли нормальная функция для получения длины массива в сишке?
                  , объявляющая войну, если аргументом передан не массив.
                  Предполагаю, что нет.
                  Ответить
                  • если аргументом передан не массив, то всё, компилятор его обслуживает как указатель
                    Ответить
                  • Вот такую гадость посоветовали на stackoverflow (используется в гуглохроме:
                    #define COUNT_OF(x) ((sizeof(x)/sizeof(0[x])) / ((size_t)(!(sizeof(x) % sizeof(0[x])))))
                    Оно конечно сработает, если массив из чего-то большого, но на тех же чарах и интах просто выдаст мусор.

                    А зачем это нужно в си?
                    Ответить
                    • на ptrdiff_t * мусор, если быть точным
                      в си ненужно
                      он и так быстрый
                      Ответить
                      • Не, я имел в виду, что на double * он сфейлится, т.к. sizeof(double*) не делится нацело на sizeof(double), а на char * или int * он вернет мусорное число - 4 для char*, 1 для int*. Поэтому этот метод тоже говно ;(
                        Ответить
                        • > 1 для int*
                          или 2
                          как и для double возможен 1 :)
                          Ответить
                          • Ну все зависит от платформы, да. Просто я хотел показать, что есть случаи когда оно глючит. А какие именно - уже не важно.
                            Ответить
        • Блин, я нихуя не пони(((
          Ответить
    • А что еще ожидать от человека с фамилией Hui?
      Ответить
    • Прочитал все комменты и подумал, может быть роджер hui - это Bormand?
      Ответить
      • К счастью, я не знаю J.
        Ответить
        • Как тонко ты меня обосрал
          Ответить
          • И Abbath'а тоже. Кстати, кто у нас ещё знает J?
            Ответить
            • Хуй знает
              Ответить
              • Золотой?
                Ответить
              • Мало того, что знает. Так ещё и придумал.

                З.Ы. Кстати, на project euler'е этот Роджер Хуй часто постил решения на J.
                Ответить
                • Я тоже решаю эйлера на J
                  Ответить
                  • Так может Роджер Хуй - это твой Тайлер Дёрден?
                    Ответить
                    • типа я супергерой - капитан хуй?
                      Ответить
                      • >>> супергерой
                        >>капитан хуй
                        >капитан питон
                        капитан питух
                        Ответить
                        • капитух
                          Ответить
                          • питухан
                            Ответить
                            • Шёл солдат со службы, попросился к бабке на ночлег. А бабка была жадная. Она уж видела в окно, что солдат идет. А у неё лежал на столе, на блюде, жареный петух. Вот бабка и спрятала петуха в пустой горшок, что стоял в печи. Для верности сковородой накрыла.
                              Солдат вошёл:
                              — Здорово, старая, пусти заночевать.
                              — Пожалуй, да только есть в доме нечего.
                              — Не беда, вот тут хлеб у меня...
                              Они сели с бабкой за стол, и стали есть солдатский хлеб. Но солдат чует: вкусным пахнет из печи. Тут бабка вышла за чем-то в сени, а солдат прыг к печи, мигом нашарил петуха и спрятал в свою сумку. Потом метнул в пустой горшок старый лапоть, что валялся у печи.
                              Вот бабка пришла, снова села за стол. И приспичило ей над солдатом поиздеваться.
                              — А что, — говорит, — ты по свету бродил, так не слыхал ли: в Пенске-Черепенске, что под Сковородным, живёт ли воеводой Курухтан Курухтанович?
                              — Что ты, старая, — говорит солдат, — там теперь воеводой Плетухан Плетуханович.
                              Бабка решила, что солдат дурной совсем.
                              Вот утром солдат ушёл, а домой вернулся дед — он в соседнее село ездил. Вернулся голодный:
                              — Бабка, собирай на стол!
                              Бабка полезла в печь, а сама болтает, рассказывает деду, как солдата голодным оставила, да и посмеялась над ним: глупый-де солдат и не понял, что Курухтан Курухтанович — это петух!
                              Залезла в горшок, что стоял в печи, а там лапоть.
                              Ответить
                              • >Плетухан Плетуханович.

                                А я читал эту сказку в другой вореции: там именно Петухан-Курыханович.
                                И про то что он перебрался в Суму-Заплеченскую. И солдат там джвое было.

                                Ответить
                              • Гораздо лучше ведь
                                Попросились к богатому мужику два прохожих солдата:
                                - Пусти, хозяин, обогреться, отдохнуть часок-другой.
                                - Хозяина дома нет, - хозяйка отвечает, - ну да ладно, заходите, только ноги вытирайте.

                                Зашли солдаты, поздоровались и спрашивают:
                                - А что, хозяюшка, не найдется ли чего у тебя горяченького похлебать с дороги?
                                А хозяйка была скупая, скаредная: зимой льду не выпросишь.
                                - Нет у меня ничего горячего, сегодня и печку не топила.
                                - Ну, на нет и суда нет, - солдаты говорят, а сами видят, что хозяйка обманывает: печь так жаром и пышет, а из печи жареным отдает.
                                Отдыхают солдаты, достали по сухарику, грызут да водой запивают. И захотелось хозяйке над солдатами посмеяться.
                                - Вот что, служивые, люди вы бывалые, много видали, слыхали; загадаю я вам загадку, слушайте: в Печинске-Горшечинске, под Сковородинском живет ли теперь Петухан Курыханович?
                                В ту пору заиграл пастуший рожок. Хозяйка кинулась из избы - пастух коров гонит, надо своих во двор загнать.
                                И ушла.
                                Солдаты достали из печки горшок, вынули петуха, уложили в ранец, а в горшок лапоть сунули.
                                Загнала старуха скотину, воротилась и спрашивает:
                                - Ну как, слыхали ли что про Петухана Курыхановича?
                                - Слышали, слышали, хозяюшка, только Петухан Курыханович теперь перебрался в Суму-Заплеченскую, а в Печинске-Горшечинске под Сковородинском теперь живет Заплетай-Расплетаевич.
                                Засмеялась хозяйка:
                                - Слышали вы, служивые, звон, да не знаете, где он. Ну, ладно, некогда мне с вами лясы точить, надо коров доить, а вы отдохнули, так пора и в путь-дорогу идти.
                                Распростились солдаты, ушли.
                                Вечером воротился домой муж, ужинать пора. Накрыла хозяйка стол, достала из печки горшок, ткнула вилкой в лапоть, не может вытащить.
                                - Жарила, жарила, а петух все сырой!
                                Зачерпнула уполовником - а там лапоть.
                                Ответить
                                • > перебрался в Суму-Заплеченскую

                                  Да! Именно этот вариант я и читал много лет назад, да сходу не смог найти, а по памяти воспроизводить трудновато.

                                  Кобенация с одновременными переводами в разные города Петухана и Заплетая намного лучше.
                                  Ответить
                          • Капитух Америка в Капитолии
                            Стена | ВКонтакте
                            vk.com/wall681008?offset=5860

                            ... свою проклятую волчью пасть!!!!=))))))). 19 авг 2008|Комментировать|Тет-а-тет. Комментировать.. Нина Нина. так,капитух не понял,почему пёс убитый?


                            PS Капитуляция - это ж производное от питуляция/питульность?
                            Ответить
                            • Тогда было бы «копитуляция» или, в более русском варианте, «сопитуляция» (по аналогии с co-processor → сопроцессор). Кстати, становится очевидным, почему не стали вводить термин «копроцессор», а заменили чужеземную приставку «ко-» на русскую «со-».
                              Ответить
                              • > Кстати, становится очевидным, почему не стали вводить термин «копроцессор»

                                «копрограмма»

                                >Тогда было бы «ко-ко-ко-ко-питуляция»
                                Исправили же, для благозвучности
                                Ответить
                                • Звучит как «гемограмма» или «спермограмма».
                                  Ответить
                                  • А Дональд Кнут называл копрограмму более общим случаем подпрограммы. И посмею заявить - он глубоко глядел.

                                    Мы же на ГК.
                                    Ответить
                                  • КОПРОН
                                    Ответить
                                • >> копрограмма

                                  Копрограммы у нас в общественных туалетах с избытком
                                  Ответить
                            • Ох, нехорошо вышло. Теперь все знают, что я Нина.
                              Ответить

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