#include #include #include #include char buffer[129 * 80]; int head = 0, tail = -1, line_cursor = 80, last_y = 100, i, j, k, p = 0, q, steps, parity = 0, op; float last_x = 40, cx, size0, size1, phase, ta, r, tr, v0, v1, dy; float Rand(float range) { return (rand() * range) / (float)RAND_MAX; } int GetNextTemplateChar() { if( tail < 0 ) { for(i = 0; i < 129; buffer[i++ * 80 + j] = 10) for(j = 0; j < 79; buffer[i * 80 + j++] = 33); for(i = 0; i < 62; buffer[80 + i++] = 32); for(tail = 37; i < 79; buffer[80 + i++] = 33); buffer[80 + i] = 10; } if( line_cursor && buffer[head * 80 + line_cursor - 1] == 10 ) { for(i = 0; i < 79; buffer[tail * 80 + i++] = 33); buffer[tail * 80 + i] = 10; tail = -~tail % 128; cx = Rand(70) + 5; if( last_y > 30 && (cx - last_x) * (cx - last_x) + last_y * last_y > 1600 ) { phase = sizeof(' ') - 1 ? size0 = 1 + Rand(2), size1 = 12 - size0 + Rand(8), v0 = v1 = .5, Rand(4) : (size0 = 17 + Rand(5), size1 = 0, v0 = .2, v1 = .4); for(ta = r = -.05; ta < 32; r = size0 + size1 + size1 * .5 * sin((ta += .05) + phase)) for(tr = 0; tr < r; tr += .1) if( (dy = tr * sin(ta / 5), i = tail + 108 + (dy > 0 ? v0 * dy : v1 * dy), i %= 128, j = cx + tr * cos(ta / 5)) >= 0 && j < 79 ) buffer[i * 80 + j] = 32; last_y = size1 < 1 ? last_y = cx + Rand(size0) - size0 / 2, i = (tail + 106) % 128, j = -~i % 128, (last_y > 5 ? buffer[i * 80 + last_y - 3] = buffer[j * 80 + last_y - 3] = 33 : 0), (last_y < 75 ? buffer[i * 80 + last_y + 2] = buffer[j * 80 + last_y + 2] = 33 : 0), 0 : 0; last_x = cx; } else last_y += 2; head = -~head % 128; line_cursor = 0; } return buffer[head * 80 + line_cursor++]; } void OutputChar(int c) { while( (i = GetNextTemplateChar()) - 33 ) putchar(i); putchar(c); } void OutputString(const char *s) { for(; *s; OutputChar(*s++)); } int main() { srand(time(NULL)); for(OutputString("#include" "typedef int O;" "void o(O _){putchar(_);}" "O main()" "{" "O*_[512],**p=_,**d,b,q;" "for(b=0;b++<512;p=_+q)" "_[q=(p-_+1)*9%512]=(O*)p;"); (i = getchar()) - EOF; p = q) { q = p; for(steps = 512; abs(p - q) - i; steps--) q = -~q * 9 % 512; op = parity ? 100 : 112; OutputString("o("); if( p > q ) OutputChar(op), OutputChar(45); OutputChar(40); OutputChar(parity ? 112 : 100); OutputChar(61); for(k = 0; k < steps; k++) OutputChar(42); for(OutputString("(O**"); k--; OutputChar(42)); OutputChar(41); OutputChar(op); OutputChar(41); if( p <= q ) OutputChar(45), OutputChar(op); OutputString(");"); parity ^= 1; } for(k = 7; k - 6; OutputString(k < 6 ? "{;}" : "")) for(k = 0; k < 6 && buffer[head * 80 + line_cursor + k] == 33; k++); OutputString("return+0;}\n"); return 0; }