#include typedef unsigned int word; static word seed[] = { 0 }; static word result[256], result_count = 0; static word mm[256], aa = 0, bb = 0, cc = 0; static word Isaac(void) { word i, x, y; if( result_count-- == 0 ) { cc++; bb += cc; for(i = 0; i < 256; i++) { x = mm[i]; aa ^= (i & 1) ? aa >> ((i & 2) ? 16 : 6) : aa << ((i & 2) ? 2 : 13); aa += mm[(i + 128) & 255]; mm[i] = y = mm[(x >> 2) & 255] + aa + bb; result[i] = bb = mm[(y >> 10) & 255] + x; } result_count = 255; } return result[result_count]; } static void Decode(char *data, word *size) { word w, i; char *r; *size = w = 0; for(r = data; *r > '%';) { for(i = 0; i < 5; i++) { w = w * 85 + (83 + *r) % 89; r++; } w ^= Isaac(); for(i = 0; i < 4; i++) { data[*size] = w & 0xff; w >>= 8; ++*size; } } *size -= *r % 5; } int main(void) { char data[] = "E3yua`:z+-Xg`Mv$"; word i; for(i = 0; i < 256; i++) mm[i] = 0; for(i = 0; i < sizeof(seed) / 4; i++) mm[i & 255] ^= seed[i]; for(i = 0; i < (1 << 24); i++) Isaac(); Decode(data, &i); fwrite(data, i, 1, stdout); return 0; }