How to Add Sudoku

Back

Given two valid sudoku squares, it's possible to produce a third one. I arbitrarily call this procedure "adding", although it has little to do with actual addition of integers.

Normalization

The addition method hinges on the process of normalization, something I found out about while reading about how to find the total number of valid sudoku majic squares. Normalization is a way of re-arranging the numbers in a valid sudoku while still keeping its sudoku-ness. It's obvious that you can swap a pair of numbers in a sudoku and still keep it valid. So, given the sudoku:

1 3 6 8 5 2 7 9 4
7 2 4 1 3 9 5 8 6
8 5 9 4 6 7 3 1 2
6 7 3 9 2 8 4 5 1
5 1 8 6 7 4 9 2 3
9 4 2 3 1 5 8 6 7
4 9 1 7 8 6 2 3 5
2 6 7 5 9 3 1 4 8
3 8 5 2 4 1 6 7 9
we can swap 3 and 2 to get:
1 2 6 8 5 2 7 9 4
7 3 4 1 2 9 5 8 6
8 5 9 4 6 7 2 1 3
6 7 2 9 3 8 4 5 1
5 1 8 6 7 4 9 3 2
9 4 3 2 1 5 8 6 7
4 9 1 7 8 6 3 2 5
3 6 7 5 9 2 1 4 8
2 8 5 3 4 1 6 7 9

Which is an equally valid sudoku square. In like manner, we can 'normalize' any sudoku by performing this type of swap on all the numbers so as to get the first row to read "1 2 3 4 5 6 7 8 9". For the example sudoku, its normalized form is:


1 2 3 4 5 6 7 8 9
7 6 9 1 2 8 5 4 3
4 5 8 9 3 7 2 1 6
3 7 2 8 6 4 9 5 1
5 1 4 3 7 9 8 6 2
8 9 6 2 1 5 4 3 7
9 8 1 7 4 3 6 2 5
6 3 7 5 8 2 1 9 4
2 4 5 6 9 1 3 7 8

Mathematicians who enumerate sudoku use this method to divide sudoku into types, so they can count the members of a type and then add these numbers together. But it's obvious that the normalization process is arbitrary. You could as easily say that normalization is swapping the digits to make the first row read "9 8 7 6 5 4 3 2 1":


9 8 7 6 5 4 3 2 1
3 4 1 9 8 2 5 6 7
6 5 2 1 7 3 8 9 4
7 3 8 2 4 6 1 5 9
5 9 6 7 3 1 2 4 8
2 1 4 8 9 5 6 7 3
1 2 9 3 6 7 4 8 5
4 7 3 5 2 8 9 1 6
8 6 5 4 1 9 7 3 2

Or the first block:
1 2 3 7 8 5 4 9 6
4 5 6 1 2 9 8 7 3
7 8 9 6 3 4 2 1 5
3 4 2 9 5 7 6 8 1
8 1 7 3 4 6 9 5 2
9 6 5 2 1 8 7 3 4
6 9 1 4 7 3 5 2 8
5 3 4 8 9 2 1 6 7
2 7 8 5 6 1 3 4 9
Or, indeed, any block, row, or column. Here's an example which normalizes our sudoku to "123654789" on the third column:
7 6 1 5 9 4 8 3 2
8 4 2 7 6 3 9 5 1
5 9 3 2 1 8 6 7 4
1 8 6 3 4 5 2 9 7
9 7 5 1 8 2 3 4 6
3 2 4 6 7 9 5 1 8
2 3 7 8 5 1 4 6 9
4 1 8 9 3 6 7 2 5
6 5 9 4 2 7 1 8 3

Normalization and Addition

So, to add a pair of sudoku, I successively normalize the rows of the first member of the addition by the corresponding row of the second one, then normalize the columns of first member by the columns of the second one. To add the sudoku A:
1 3 6 8 5 2 7 9 4
7 2 4 1 3 9 5 8 6
8 5 9 4 6 7 3 1 2
6 7 3 9 2 8 4 5 1
5 1 8 6 7 4 9 2 3
9 4 2 3 1 5 8 6 7
4 9 1 7 8 6 2 3 5
2 6 7 5 9 3 1 4 8
3 8 5 2 4 1 6 7 9
And B:
9 1 4 3 7 8 2 5 6
6 7 8 5 2 1 3 9 4
5 2 3 9 6 4 1 8 7
3 4 6 7 9 5 8 1 2
8 5 7 1 4 2 6 3 9
2 9 1 8 3 6 4 7 5
7 6 9 4 1 3 5 2 8
1 8 2 6 5 9 7 4 3
4 3 5 2 8 7 9 6 1
The first action is to normalize the first row of A by B, resulting in:
9 1 4 3 7 8 2 5 6
2 8 6 9 1 5 7 3 4
3 7 5 6 4 2 1 9 8
4 2 1 5 8 3 6 7 9
7 9 3 4 2 6 5 8 1
5 6 8 1 9 7 3 4 2
6 5 9 2 3 4 8 1 7
8 4 2 7 5 1 9 6 3
1 3 7 8 6 9 4 2 5
After all 18 normalization operations are applied, the result of A+B is C:
2 9 4 3 8 7 5 1 6
5 7 6 2 9 1 8 3 4
3 8 1 6 4 5 9 2 7
4 5 9 1 7 3 6 8 2
8 2 3 4 5 6 1 7 9
1 6 7 9 2 8 3 4 5
6 1 2 5 3 4 7 9 8
7 4 5 8 1 9 2 6 3
9 3 8 7 6 2 4 5 1

Add Animated!

With the Magic of Javascript, you can display an animation of the addition process by banging the "<Animate!>" button. This animation will display each of the intermediate squares as they're normalized by row and then column. The time specified in the "Delay" part of the add parameter form specifies how many milliseconds to display each intermediate square. I've left the script open inside the animation page, so you can examine and modify it as you wish. One entertaining segment might be the CSS of the animation page, also explicitly included in a "<style>" section.

Maybe it's not addition, exactly.

Unlike integer addition, this operation is not commutative; A+B does not equal B+A. Also, the last column of the result "C" is always the same as the last column of B, because that is the last normalization operation performed. And, of course, adding a pair of identical sudoku is an identity operation -- that is, A+A=A.

Back