/* evalf5.c (yukino.c) - Don Yang (uguu.org) Preprocess step 5: compress with preprocessor 11/05/99 */ #include #include #include #define j(x) (x > 47 && x < 58) || x == 46 #define R return #define E else #define F E if #define C(x, X) case x: R X; #define P printf #define W(x) putchar(x); #define V(x) } void x(int s) { #define M(x) !memcmp(e + d, k[x], 3) char *k[19] = { "-", "+", "%", "/", "*", "-", "exp", "ln", "log", "atan", "acos", "asin", "tan", "cos", "sin", "^", "(", "e", "PI"}, e[2049]; int d, m, l, p, u[2048], n[2048], w[2048], v[2048], q, c, i; double t[2048], o; double f(int r) { switch( u[r] ) { C(294, atan2(0, -1)) C(278, exp(1)) C(262, f(w[r])) C(245, pow(f(n[r]), f(w[r]))) C(228, sin(f(w[r]))) C(212, cos(f(w[r]))) C(196, tan(f(w[r]))) C(180, asin(f(w[r]))) C(164, acos(f(w[r]))) C(148, atan(f(w[r]))) C(132, log10(f(w[r]))) C(116, log(f(w[r]))) C(100, exp(f(w[r]))) C(83, -f(w[r])) C(66, f(n[r]) * f(w[r])) C(50, f(n[r]) / f(w[r])) C(34, fmod(f(n[r]), f(w[r]))) C(17, f(n[r]) + f(w[r])) C(1, f(n[r]) - f(w[r])) } R t[r]; V(g) for(m = l = !P("%s ", k[s >> 4]); u[v[c]] - 262 && (u[v[c]] & 7) >= (s & 7); c = v[c]); v[q] = v[n[q] = c]; u[v[c] = w[v[q]] = q] = s; c = q++; V(h) if( m ) g(66); if( s == 310 ) { m = P("%lG ", t[q] = o); } F( s == 294 || s == 278 ) { m = P("%s ", k[s >> 4]); } E { if( s == 262 ) { p++; if( l ) W(8) } m = !P("%s", k[s >> 4]); } l = 0; if( s > 99 && s < 229 ) l = W(32) u[q] = s; v[w[c] = q] = c; c = q++; } int main(int a, char *b[]) { if( a == 1 ) R P("?\n"); strcpy(e, b[q = 1]); for(i = 2; i < a; strcat(e, b[i++])); strlwr(e); for(u[d = m = p = c = 0] = 262; e[d];) { if( j(e[d]) ) { sscanf(e + d, "%lf", &o); for(h(310); j(e[d]); d++); if( e[d] == 101 ) { d++; if( e[d] - 43 && e[d] - 45 ) d--; for(d++; e[d] > 47 && e[d] < 58; d++); } } F( e[d] > 97 && e[d] < 117 ) { if( M(14) ) h(228); F( M(13) ) h(212); F( M(12) ) h(196); F( M(6) ) h(100); F( M(8) ) h(132); E { if( !memcmp(e + d, "pi", 2) ) h(294); F( !memcmp(e + d, "ln", 2) ) h(116); E { if( e[d] == 101 ) h(278); d--; } d--; } d += 3; } F( e[d] == 97 ) { d++; if( M(14) ) h(180); F( M(13) ) h(164); F( M(12) ) h(148); E d -= 3; d += 3; } E { i = e[d++]; if( m ) { if( i == 40 ) { h(262); } F( i == 41 && p ) { P("\b) "); for(c = v[c]; u[c] - 262; c = v[c]); p--; } E { if( i == 42 ) g(66); F( i == 47 ) g(50); F( i == 37 ) g(34); F( i == 43 ) g(17); F( i == 45 ) g(1); F( i == 94 ) g(245); } } E { if( i == 40 ) h(262); F( i == 45 ) h(83); } } } if( !m ) { o = 0; h(310); } for(i = !W(8) i++ < p; )W(41) R !P("\n= %.16lG\n", f(0)); }