Няшная / Говнокод #12108 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 bazhenovc, (Updated )

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

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

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

      Выражаю благодарность astyle, cpp и vim без которых мне было бы влом копаться в этом говне великолепном коде.
      Ответить
        • Не ту строчку показал 😉

          > 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 итд.
                                Ответить
                                • тем временем Тарас на гамедеве уже регулярно затыкает за пояс известного гуру сиплюсплюс, мы вырастили идеальное смертоносное оружие, господа
                                  Ответить
              • bormand, defecate-plusplus, и если ещё остались умные люди, знающие си: процитирую себя, вопрос ещё в силе:
                >Есть ли нормальная функция для получения длины массива в сишке?
                , объявляющая войну, если аргументом передан не массив.
                Предполагаю, что нет.
                Ответить
                • если аргументом передан не массив, то всё, компилятор его обслуживает как указатель
                  Ответить
                • Вот такую гадость посоветовали на stackoverflow (используется в гуглохроме:
                  #define COUNT_OF(x) ((sizeof(x)/sizeof(0[x])) / ((size_t)(!(sizeof(x) % sizeof(0[x])))))
                  Оно конечно сработает, если массив из чего-то большого, но на тех же чарах и интах просто выдаст мусор.

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

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

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

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

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

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

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


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

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

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

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

                                Копрограммы у нас в общественных туалетах с избытком
                                Ответить

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

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8