#include #include #include using namespace std; #define MAX (1LL<<14) #define ORIGIN (MAX/2) long long pack(long long x, long long y) { return x + MAX * y; } void unpack(long long index, long long &x, long long &y) { x = index % MAX; index /= MAX; y = index % MAX; } #define DXY 8 long long dxy[DXY]; void initdxy() { int d=0; for (long long dx=-1; dx<=+1; dx++) { for (long long dy=-1; dy<=+1; dy++) { if (dx || dy) { dxy[d] = pack(dx,dy); d++; } } } } bitset world; int countUpTo3(long long index) { int nb = 0; for (int d=0; d set; int main() { initdxy(); set gen[2]; int g = 0; gen[g].insert(pack(ORIGIN, ORIGIN)); for (int n=1; ; n++) { if (n>1) { cout << n << ' ' << gen[g].size()/4 << endl; } if (n==ORIGIN-1) { break; } for (set::const_iterator it = gen[g].begin(); it != gen[g].end(); ++it) { world.set(*it); } gen[1-g].clear(); for (set::const_iterator it = gen[g].begin(); it != gen[g].end(); ++it) { for (int d=0; d