[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Офигенный код
NEFFboy
Нарыл на просторах интернета вот такой код:

Код

#include <stdio.h>
float err=0, vars[27], q, r; char s1[1024]=" ", *st=s1+1, *x, *y, g, f=1;
float main(char *s, int i1, int i2, int u)
{  char c=0, op[]=",=+-*/", *p, *t, d; int br=0, i;
  if (f) goto l1; else if (i1>i2) { err=err?1:!u; return 0; }
  for (p=op; *p; p++)
    for (i=(*p=='='?i1:i2); d=s[i],(*p=='='?i<=i2:i>=i1); (*p=='='?i++:i--))
      if(!br&&d==*p){c=*p;goto l;} else if(d=='('||d==')')br+=(d=='('?1:-1);
l: if (c==',') { main(s, i1, i-1, 0); return main(s, i+1, i2, 0); }
  if(d=s[i1]&223,c=='=') return  i1==i-1&&d>64&&d<91?vars[d-65]=main(s,i+1,i2,0):(err=1,0);
  if((s[i-1]&223)!='E'&&(c=='+'||c=='-'))return main(s,i1,i-1,1)+(44-c)*main(s,i+1,i2,0);
  if (c=='/') {q=main(s, i+1, i2, 0); return q?main(s, i1, i-1, 0)/q:(err=1);}
  if (c=='*') return main(s, i1, i-1, 0)*main(s, i+1, i2, 0);
  if(s[i1]=='(') return s[i2]==')'?main(s, i1+1, i2-1, 0):(err=1,0);
  if (i1==i2 && (s[i1]&223)>64 && (s[i1]&223)<91) return vars[(s[i1]&223)-65];
    return (sscanf(s+i1,"%g%n",&r,&i) && i==i2-i1+1)?r:(err=1, 0);
l1:for(f=0,gets(st),x=st,y=st; err=0,g=*x,(x>st?*(x-1):*st); x++)
    if(g!=' '||*(y-1)>47&&*(y-1)<58&&*(x+1)>47&&*(x+1)<58)*(y++)=(g?*x:0);
  if (printf((err?"Error!\n\n":"%g\n\n"), main(st, 0, y-st-2, 0))) goto l1;
}


прога калькулатор... рабочая между прочим...

Калькулятор v21a - 20 строк!

Поддерживаются стандартные арифметические операции над данными типа float, однобуквенные переменные, оператор присваивания (в том числе "сквозной", например x=y=z=1), а также оператор «запятая». При записи чисел с плавающей точкой возможно использование формата [+-]dddE[+-]ddd, например, 2e-2. Реализован контроль синтаксических ошибок и деления на ноль. Работоспособность проверялась на Borland C 3.1. Для того, чтобы программа скомпилировалась, необходимо запретить использование синтаксиса C++, а чтобы правильно работала, необходимо использовать соглашения о вызовах языка C (не Pascal!). Кстати, эти требования соответствуют установкам BC 3.1 по умолчанию.
(с) Дмитрий Мельник, 21 сентября 2000 г.
whisk
стоит также обратить внимание на рекурсивный main.
KostyaN
код может и интересный, но тому, кто его редактировал, стоило бы открутить руки...
Тот, кто писал, используя метки, не вызывает у меня никакого уважения...
Так что, если завтра у меня не будет болеть голова, разберемся...
дед_мажор
боян. гуглите на тему The International Obfuscated C Code Contest.
пост у меня в жж - http://dedm.livejournal.com/55622.html.
дед_мажор
Цитата (whisk @ 15.03.2007 - 23:49)
стоит также обратить внимание на рекурсивный main.

а также на несоблюдение стандарта на агрументы и возвращаемое значение этой функции.
whisk
дед_мажор
да, боян уже 7 лет. ты хочешь кого-то этим удивить?
дед_мажор
Цитата (whisk @ 16.03.2007 - 01:06)
ты хочешь кого-то этим удивить?

не понял вопроса.
whisk
дед_мажор
немного оффтопа: почти все в инете - боян. не надо, плз, писать об этом каждый раз, хорошо? wink.gif мы и так знаем, что ты крут непеально wink.gif

дед_мажор
Цитата (whisk @ 16.03.2007 - 02:31)
боян. не надо, плз, писать об этом каждый раз, хорошо? wink.gif

у меня "боян" - это вводное слово, а не высказывание. в нем не нужно искать полезную информацию. так что не надо каждый раз комментировать слова, не несущие смысловой нагрузки, а также указывать мне, в каком стиле и с каким содержанием должны быть написаны мои посты, хорошо? )
KostyaN
дык, по теме
что-то не понял, зачем сие произведение сюда выложили?
чтобы помогли понять, как работает, чтобы помогли скомпилить, или чтобы просто так, показать, что сие возможно?
так если первое или второе, так формулируйте сразу, а если третье, тогда не понятно, на кого эффект рассчитан...
NEFFboy
whisk
имхо, вызавать рекурсивно маин есть дурнейший тон...

дед_мажор
фраза в описании: "чтобы программа скомпилировалась, необходимо запретить использование синтаксиса C++"

KostyaN
кинул, что бы народ посматрел программирование квадратиком book.gif
whisk
NEFFboy
если бы эта прога была написана красиво и прилично, то был ли бы смысл на нее смотреть? их же миллион таких. хотя, уродливых еще больше, но эта по крайней мере забавная wink.gif

так её кто-нибудь скомпилировал? а то мне даже нечем sad1.gif
дед_мажор
Цитата (NEFFboy @ 16.03.2007 - 15:51)
дед_мажор
фраза в описании: "чтобы программа скомпилировалась, необходимо запретить использование синтаксиса C++"

чтобы программа скомпилировалась необходимо использовать нормальный компилятор. gcc со стандартными настройками кушает этот код без ошибок.
RoDen
а мне вот вспоминаются шахматы на яваскрипт, играющие на уровне 1 разряда и весящие 5 килобайт smile.gif
в свое время хотел их в чат прикрутить
NEFFboy
Цитата (whisk @ 16.03.2007 - 16:57)
так её кто-нибудь скомпилировал?

скомпилировал это хозяйство Borland C++ Compiler 5.5 c кучей warning'ов...
дед_мажор
NEFFboy
воистину сотонинский компилятор.
Fast Reply:

 Enable Smilies |  Enable Signature
Здесь расположена полная версия этой страницы.
Студенческий клуб ostudent.ru и его создатели не несут ответственности за достоверность самостоятельно размещаемой посетителями сайта информации и не могут подтвердить или опровергнуть её.
Рейтинг@Mail.ru
Invision Power Board © 2001-2025 Invision Power Services, Inc.