Show HN: Chessboardify – Make the grid a chessboard
chessboardifygame.xyz
chessboardifygame.xyz
Classic lights out only toggles the light you press and the 4 lights in the 4 cardinal directions. I was surprised how baked into my brain that was and how much trouble I had getting my brain to adapt.
Simple things are pretty powerful sometimes, don't you think?
For this particular game there is probably a more intuitive way to directly solve it.
101 010
010 or 101
101 010
where 1 is a white square and 0 is a black square.We can represent any N×N board as a N² vector. So, we can represent one of the chessboard pattern as:
010
101 = 010101010 = y
010
At the beginning of the game, the board is at some random initial pattern. 110
111 = 110111010 = y0
010
The goal of the game is to find the necessary moves to form the chessboard pattern. Hence, we want to solve the equation (y - y0) = Mx
where M is a N²×N² matrix representing the effect of every possible moves. Pressing on a tile is equation to addition by 1 modulo 2. 1 + 1 = 0 (mod 2)
0 + 1 = 1 (mod 2)
For example, pressing the top left tile is the same as adding this effect vector to the board vector: 110110000
If we do this for all 9 tiles of the 3x3 board, we find the matrix M to be: 110110000
111111000
011011000
110110110
111111111 = M
011011011
000110110
000111111
000011011
where the i-th row is the effect of pressing the i-th tile. Now, we can just solve for x (assuming M is not singular). Re-using our above example, we find (y - y0) = Mx
(010101010 - 110111010) = Mx
100010000 = Mx
111100100 = x (by Gaussian elimination)
This means we can press the following tiles (in any order) on the board to solve it: 111
100
100
If you are interested, I wrote some quick demo code that shows how this could be implemented in Python: https://gist.github.com/avassalotti/7452318c9e9b8dec637bc7c0... 101
010
100
The first and second rows are solved. However we cannot solve the last row without re-doing the first and second rows. The two solutions of this board shows this: solution #1:
110
100
000
solution #2:
110
110
000
Actually, seeing my mistake made me challenge my assumption that a singular matrix over the reals might not be over integers modulo 2. This is likely wrong too. I don't know much about abstract algebra (and I am not a mathematician). Wikipedia (https://en.wikipedia.org/wiki/Determinant#Square_matrices_ov...) states "the reduction modulo m of the determinant of such a matrix is equal to the determinant of the matrix reduced modulo m."The move matrix M for all boards of size 3n + 2 appears to be singular. This means these boards may have no solution or a large number of solutions.
FYI, a singular matrix taking values in {0,1} that is singular over R if and only if it is also singular over Z/2, for exactly the reason you provide, that the determinant commutes with modding by 2.
Neat game.
I'd share i'd via google spreadsheet if I could do it anonymously without creating a throwaway account
(All this in 3x3 grids, with the numbers mod 2)
- 1. Add the current light up state to the desired light state (chessboard)
- 2. Create a grid that's lit up as if from button presses from previous grid (using the game rules)
- 3. Flip the positions of the previous grid across the center. This grid is the grid of buttons to push
No idea how it works though, and it doesn't seem to work in the 4x4 case either
Works by calculating via formulae the result of any sequence, 6 moves or less. The bit patterns of each individual move are XORed together for each possible combination of moves.
The difference between the current state and the target is calculated, again via XOR, and then looked up in this data sheet via the query functionality, to give the sequence of moves which resulted in that delta bit pattern.
I think it's pretty amazing how good you get in this game once you play it a little more. At first it's simply impossible, but you start to recognize the patterns pretty quickly and you can usually beat the 3x3 ones in less than 10 moves.
There is a lot of math involved in this game and you can quite quickly note some less obvious rules like this one. Maybe there are some very nontrivial, but interesting things out there. I'm not good enough in combinatorics to tell... :D