|
Titlul: Code Golf: Evaluare de expresie aritmetica Scris de: Cosmin Negruseri din Mai 31, 2012, 05:46:23 http://infoarena.ro/blog/evaluare
Titlul: Răspuns: Code Golf: Evaluare de expresie aritmetica Scris de: Adrian Budau din Mai 31, 2012, 08:36:19 Very very ugly:
Cod: int e(char * &s,int l=0,int v=0){if(l==2){if(*s=='('){++s;int r=e(s);++s;return r;}else if(*s>='0'&&*s<='9'){int r=v*10+(*s)-'0';return e(++s,2,r);}else return v;}else if(l==1){int r=e(s,2);while(1){if(*s=='*')r*=e(++s,2);else if(*s=='/')r/=e(++s,2);else return r;}}else{int v=e(s,1);while(1){if(*s=='+')v+=e(++s,1);else if(*s=='-')v-=e(++s,1);else return v;}}}Titlul: Răspuns: Code Golf: Evaluare de expresie aritmetica Scris de: Cosmin Negruseri din Mai 31, 2012, 08:56:09 Ar fi util sa scrii si varianta de la care ai pornit.
Titlul: Răspuns: Code Golf: Evaluare de expresie aritmetica Scris de: Adrian Budau din Mai 31, 2012, 11:32:16 Am scris-o direct. Dar am avut in cap varianta de la arhiva educationala cu recursivitate directa(se poate gasi usor). Se pot folosi si alte functii? Asta e varianta cu o singura functie :-)
Titlul: Răspuns: Code Golf: Evaluare de expresie aritmetica Scris de: Simoiu Robert din Mai 31, 2012, 16:03:36 Am facut eu una mai scurta, a mea are 300 vs 361 a lui Adi, ideea e cam la fel, e tot din arhiva educationala.
Cod: int f(int L,char*&p){int x,c,d;if(L==2)if(*p=='(')++p,x=f(0,p),++p;else for(x=0;isdigit(*p);)x=x*10+*p++-'0';else for(x=f(L+1,p);;){char X=*p;if(L)d=X=='*'?1:X=='/'?2:0,c=3;else c=X=='+'?1:X=='-'?2:0,d=3;if(!c||!d)break;int a=f(L+1,++p);if(c==1)x+=a;if(c==2)x-=a;if(d==1)x*=a;if(d==2)x/=a;}return x;}Titlul: Răspuns: Code Golf: Evaluare de expresie aritmetica Scris de: Dan H Alexandru din Mai 31, 2012, 19:21:53 Cod: int e();int f(){int n,R,S,o,T;o=T=R=S=1;while(T){S=1;n=0;if(s[x]=='-')S=-S,++x;else if(s[x]=='+')++x;if(s[x]=='(')x++,n=e();else for(;'0'<=s[x]&&s[x]<='9';n=n*10+s[x++]-48);if(o)R*=S*n;else if(n)R/=n;else R=0;if(s[x]=='/')o=0,x++;else if(s[x]=='*')o=1,x++;else T=0;}return R;}int e(){int S=0;while(s[x]!=')')S+=f();++x;return S;}Solutia mea e fara pointeri , insa are 329 de caractere. Totusi eu pornesc de la o recursivitete cu 2 functii. ( http://infoarena.ro/job_detail/754129?action=view-source ) Lungimea nu e redusa la maxim , am 2 while-uri si cu o astfel de solutie cred ca se poate ajunge la 315-320 de caractere. Titlul: Răspuns: Code Golf: Evaluare de expresie aritmetica Scris de: Cosmin Negruseri din Mai 31, 2012, 21:36:36 E ok sa scrieti si pe mai multe linii. Putem ignora spatii si \n cand comparam solutii.
Titlul: Răspuns: Code Golf: Evaluare de expresie aritmetica Scris de: Pripoae Teodor Anton din Iunie 01, 2012, 05:54:00 Javascript:
Cod: function a(b){return eval(b);};Titlul: Răspuns: Code Golf: Evaluare de expresie aritmetica Scris de: Paul-Dan Baltescu din Iunie 01, 2012, 06:16:38 Like a sir!
Titlul: Răspuns: Code Golf: Evaluare de expresie aritmetica Scris de: Cosmin Negruseri din Iunie 01, 2012, 06:49:59 Python are si el eval.
Va dau o varianta pe care vreau sa o scurtez: Cod: def find_zero_level_op(expr, ops): |