eryopu (c, doesn't expire)
#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[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);
		}
	}
}