
Show HN: Chessboardify – Make the grid a chessboard - mapehe
http://chessboardifygame.xyz/
======
jtokoph
Neat variation on LightsOut ([http://chenglou.github.io/react-lights-
out/](http://chenglou.github.io/react-lights-out/)). I had some trouble since
the rules for which lights toggle are slightly different with this one:

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.

~~~
kcorbitt
I had a technical interview just last week wherein I was asked to write a
program to determine whether a given lights out board could be solved or not!
Hadn't ever seen the game before then.

------
rustyfe
My only complaint is that the alert box prevents seeing the final board. It'd
be nice to get to actually see my beautiful chessboard creations.

~~~
lgas
Dismiss the alert. Tada.

~~~
Animux
Then a new round is started and the final board is removed.

------
mapehe
I wanted to sketch this idea of a puzzle game that I came up with while on a
walk. It turned out to roll pretty well though it couldn't be any more
minimal.

Simple things are pretty powerful sometimes, don't you think?

------
alxv
Like Lights Out, this game can be solved using Gaussian elimination over Z/2
(integers modulo 2). This means the order of the tiles you press do not
matter, and that you can solve the board by forming the desired pattern row by
row.

~~~
tgb
Sorry how does it follow that you can form the pattern row by row? When you
write this down as a linear algebra problem you kinda forget about the
structure of the board, and the rows of the resulting matrix you apply Gauss
elimination to don't correspond to the rows of the game board. So you must
have meant something else that I'm missing, but I'm confused how you would
solve just the bottom row without touching any others.

~~~
alxv
For every boards are two chessboard patterns we can solve for. For example,
for a 3x3 board we can have:

    
    
      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...](https://gist.github.com/avassalotti/7452318c9e9b8dec637bc7c0fac32951)

~~~
tgb
This is a very nice exposition of the strategy, but I still don't see how it
answers my more specific question, about whether you can solve the problem row
by row (is the grid).

~~~
alxv
Sorry, it turns that was misunderstanding from my part. It turns out we cannot
solve a board row by row without revisiting the previous rows. The board below
is a counterexample:

    
    
      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...](https://en.wikipedia.org/wiki/Determinant#Square_matrices_over_commutative_rings_and_abstract_properties))
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.

~~~
tgb
Gotcha, thanks.

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.

------
RodgerTheGreat
Cool! I was inspired to write an implementation of the game in K:
[http://johnearnest.github.io/ok/ike/ike.html?gist=0007b9afbe...](http://johnearnest.github.io/ok/ike/ike.html?gist=0007b9afbe6e625b25e95eb286e32b98)

------
egypturnash
I used to play something similar all the time on my Merlin back in 1978.
[https://en.wikipedia.org/wiki/Merlin_(game)](https://en.wikipedia.org/wiki/Merlin_\(game\))

------
Artlav
Am i the only one who finds it more fun to try to get all the squares the same
color, rather than into a chessboard?

Neat game.

------
BariumBlue
Got an excel solver for the 3x3

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

~~~
Diggsey
I just created a solver for the 4x4 case, also in google sheets... Who would
have though it could handle ~15,000 rows with decent performance!

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.

------
dorianm
I did it in one move ;). Pretty neat game.

[http://imgur.com/f5sryfs](http://imgur.com/f5sryfs)

~~~
mapehe
Good job!

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.

~~~
monfrere
You should never have to use more than 9 moves for 3x3. Hitting the same
square twice has no net effect, even if the two moves on the same square are
separated by other moves.

~~~
InkyBlinky
You can actually knock that down to 8 moves (maybe less?) as the max required
for a solution. You never have to press the middle square, since it flips
every square, inverting the board. Inversion doesn't bring you closer to the
checkered pattern of the chessboard. (An inverted chessboard... is a
chessboard!)

~~~
mapehe
I just posted this on Facebook:
[https://www.facebook.com/chessboardify/?fref=nf](https://www.facebook.com/chessboardify/?fref=nf)

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

------
Grue3
Is it me, or bigger boards are much easier than 3x3? You can pretty much build
those row by row.

~~~
mapehe
I think it really depends on the size. Often the 5x5 feels like a breeze, but
then 6x6 is a lot tougher. Probably there is some mathematical reason for this
related to the divisibility of the grid side length.

------
flippant
What are you using Socket.IO for on the page?

~~~
mapehe
The puzzles are generated and the solutions are verified on the server. I'm
passing data back and forth with that.

