#include <stdbool.h>
#include <stdio.h>
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[16], 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);
}
}
}