#include #include void bit_toggle(int* n, int bit) { *n ^= 1 << bit; } bool is_open(int* lock) { for (int i = 0; i < 19; ++i) if (lock[i] == 0b111) return false; return true; } void reset(int* lock) { lock[ 0] = 0b010; lock[ 1] = 0b010; lock[ 2] = 0b010; lock[ 3] = 0b010; lock[ 4] = 0b010; lock[ 5] = 0b010; lock[ 6] = 0b010; lock[ 7] = 0b111; lock[ 8] = 0b011; lock[ 9] = 0b011; lock[10] = 0b011; lock[11] = 0b001; lock[12] = 0b001; lock[13] = 0b000; lock[14] = 0b000; lock[15] = 0b110; lock[16] = 0b110; lock[17] = 0b110; lock[18] = 0b100; } int main() { int lock[19]; for (int n = 0; n < 1024; ++n) { reset(lock); if(n & 1) { bit_toggle(&lock[3 ], 0); bit_toggle(&lock[12], 1); bit_toggle(&lock[14], 0); bit_toggle(&lock[14], 1); bit_toggle(&lock[17], 1); } if(n & 2) { bit_toggle(&lock[3 ], 2); bit_toggle(&lock[7 ], 2); bit_toggle(&lock[11], 1); bit_toggle(&lock[11], 2); bit_toggle(&lock[15], 1); } if(n & 4) { bit_toggle(&lock[6 ], 2); bit_toggle(&lock[7 ], 0); bit_toggle(&lock[7 ], 1); bit_toggle(&lock[8 ], 1); bit_toggle(&lock[10], 2); bit_toggle(&lock[16], 1); } if(n & 8) { bit_toggle(&lock[5 ], 0); bit_toggle(&lock[5 ], 2); bit_toggle(&lock[11], 0); bit_toggle(&lock[12], 0); } if(n & 16) { bit_toggle(&lock[0 ], 1); bit_toggle(&lock[1 ], 2); bit_toggle(&lock[2 ], 0); bit_toggle(&lock[2 ], 2); bit_toggle(&lock[4 ], 2); bit_toggle(&lock[5 ], 1); bit_toggle(&lock[17], 2); bit_toggle(&lock[18], 1); } if(n & 32) { bit_toggle(&lock[4 ], 1); bit_toggle(&lock[8 ], 0); bit_toggle(&lock[9 ], 0); bit_toggle(&lock[14], 2); bit_toggle(&lock[15], 2); bit_toggle(&lock[18], 0); } if(n & 64) { bit_toggle(&lock[1 ], 0); bit_toggle(&lock[3 ], 1); bit_toggle(&lock[8 ], 2); bit_toggle(&lock[10], 1); bit_toggle(&lock[13], 1); bit_toggle(&lock[17], 0); bit_toggle(&lock[18], 2); } if(n & 128) { bit_toggle(&lock[2 ], 1); bit_toggle(&lock[6 ], 0); bit_toggle(&lock[10], 0); bit_toggle(&lock[16], 0); } if(n & 256) { bit_toggle(&lock[1 ], 1); bit_toggle(&lock[4 ], 0); bit_toggle(&lock[6 ], 1); bit_toggle(&lock[9 ], 2); bit_toggle(&lock[12], 2); bit_toggle(&lock[13], 0); bit_toggle(&lock[13], 2); } if(n & 512) { bit_toggle(&lock[0 ], 0); bit_toggle(&lock[0 ], 2); bit_toggle(&lock[9 ], 1); bit_toggle(&lock[15], 0); bit_toggle(&lock[16], 2); } if (is_open(lock)) { printf("%d %010b\n", n, n); } } }