Kakuro Solver
Statement
Goal
Kakuro puzzles are similar to crosswords, but use digits (from 1 to 9) instead of letters.Rules :
- All empty cells need to be filled in with digits, in such a way that all the given sums are respected.
- You are not allowed to use the same digit more than once to obtain a given sum.
Notation :
- 'X' : represents a cell that you don't need to fill.
- Empty cell : represents a cell that you need to fill with a digit (1 - 9).
- Cell with digit : the given digit is part of the solution, don't change it.
- Cell with backslash : the required sum of the corresponding cells.
- X\ : the vertical sum X of the cells downwards,
- \X : the horizontal sum X of the cells to the right,
- X\Y : the vertical sum X of the cells downwards, and the horizontal sum Y of the cells to the right.
Each Kakuro puzzle has an unique solution. Good luck!
Example 1:
height = 3, width = 3
| X | 9\ | 11\ |
| \17 | | |
| \3 | | |
For the horizontal sum to be 3 in the second row, we have 2 options: (2, 1) and (1, 2).
For the vertical sum to be 11 in the second column, we have 8 options: (9, 2), (2, 9), (8, 3), (3, 8), (7, 4), (4, 7), (6, 5) or (5, 6).
If we combine those options we find that the value in the bottom right cell has to be 2.
| X | 9\ | 11\ |
| \17 | | |
| \3 | | 2 |
Since 2 is now fixed, we can deduce the value of its neighbors : 11 - 2 = 9, and 3 - 2 = 1.
| X | 9\ | 11\ |
| \17 | | 9 |
| \3 | 1 | 2 |
Finally we can deduce the last value in the same way : 9 - 1 = 8, or 17 - 9 = 8.
So the solution is:
| X | 9\ | 11\ |
| \17 | 8 | 9 |
| \3 | 1 | 2 |
Example 2:
height = 5, width = 5
| X | 17\ | 6\ | X | X |
| \9 | 8 | | 24\ | X |
| \20 | | | | 4\ |
| X | \14 | | | |
| X | X | \8 | | |
In this kakuro grid we have a given digit, 8, which means it's part of the solution and we can use it to solve the puzzle.
Substracting 8 from the vertical sum 17, we get 9 as the cell value beneath it.
Substracting 8 from the horizontal sum 9, we get 1 as the cell value to the right.
| X | 17\ | 6\ | X | X |
| \9 | 8 | 1 | 24\ | X |
| \20 | 9 | | | 4\ |
| X | \14 | | | |
| X | X | \8 | | |
Now by combining our options in each cell like we did in example 1, and using some guess work, we find that the solution is :
| X | 17\ | 6\ | X | X |
| \9 | 8 | 1 | 24\ | X |
| \20 | 9 | 3 | 8 | 4\ |
| X | \14 | 2 | 9 | 3 |
| X | X | \8 | 7 | 1 |
You can find here more information: https://en.wikipedia.org/wiki/Kakuro
Thanks to Djoums that helped me with the puzzle.
Input
Line 1: integer height, integer width
Next height lines: string line
Next height lines: string line
Output
The kakuro grid with comma between cells.
Constraints
Sums are natural numbers (positive and integer)
1 <= height <= 18
1 <= width <= 15
1 <= height <= 18
1 <= width <= 15
Example
Input
3 3 | X | 9\ | 11\ | | \17 | | | | \3 | | |
Output
X,9\,11\ \17,8,9 \3,1,2
Tags
Grid, Combinatorics, Brute-force, Backtracking
Difficulty
Hard
Test cases
Example 1 (3 * 3) Test
Input
3 3
| X | 9\ | 11\ |
| \17 | | |
| \3 | | |
Output
X,9\,11\
\17,8,9
\3,1,2
Validator 1 (3 * 3) Validator
Input
3 3
| X | 8\ | 4\ |
| \9 | | |
| \3 | | |
Output
X,8\,4\
\9,6,3
\3,2,1
Test 2 (4 * 4) Test
Input
4 4
| X | 23\ | 9\ | 7\ |
| \18 | | | |
| \11 | | | |
| \10 | | | |
Output
X,23\,9\,7\
\18,9,5,4
\11,8,1,2
\10,6,3,1
Validator 2 (4 * 4) Validator
Input
4 4
| X | 20\ | 17\ | 12\ |
| \23 | | | |
| \19 | | | |
| \7 | | | |
Output
X,20\,17\,12\
\23,9,6,8
\19,7,9,3
\7,4,2,1
Test 3 (1 * 3) Test
Input
1 3
| \3 | | 2 |
Output
\3,1,2
Validator 3 (3 * 1) Validator
Input
3 1
| 7\ |
| |
| 3 |
Output
7\
4
3
Example 2 (5 * 5) Test
Input
5 5
| X | 17\ | 6\ | X | X |
| \9 | 8 | | 24\ | X |
| \20 | | | | 4\ |
| X | \14 | | | |
| X | X | \8 | | |
Output
X,17\,6\,X,X
\9,8,1,24\,X
\20,9,3,8,4\
X,\14,2,9,3
X,X,\8,7,1
Validator 4 (5 * 5) Validator
Input
5 5
| X | 17\ | 7\ | X | X |
| \10 | | 2 | 24\ | X |
| \18 | | | | 4\ |
| X | \12 | | | |
| X | X | \12 | | |
Output
X,17\,7\,X,X
\10,8,2,24\,X
\18,9,1,8,4\
X,\12,4,7,1
X,X,\12,9,3
Test 5 (9 * 8) Test
Input
9 8
| X | X | X | 11\ | 20\ | X | X | X |
| X | 14\ | 29\15 | | | X | X | X |
| \23 | | | | | 9\ | X | X |
| \17 | | | 18\6 | | | 23\ | X |
| X | \17 | | | \9 | | | X |
| X | \15 | | | 13\15 | | | 10\ |
| X | X | \5 | | | 5\11 | | |
| X | X | X | \12 | | | | |
| X | X | X | \7 | | | X | X |
Output
X,X,X,11\,20\,X,X,X
X,14\,29\15,8,7,X,X,X
\23,6,5,3,9,9\,X,X
\17,8,9,18\6,4,2,23\,X
X,\17,8,9,\9,1,8,X
X,\15,7,8,13\15,6,9,10\
X,X,\5,1,4,5\11,4,7
X,X,X,\12,6,1,2,3
X,X,X,\7,3,4,X,X
Validator 5 (9 * 8) Validator
Input
9 8
| X | X | 44\ | 12\ | X | X | 38\ | 10\ |
| X | \13 | | | 6\ | \16 | | |
| X | 4\9 | | | | 11\5 | | |
| \8 | | | \21 | | | | X |
| \12 | | | 10\ | \5 | | | 11\ |
| X | \9 | | | 17\ | \3 | | |
| X | 3\15 | | | | 6\13 | | |
| \9 | | | \16 | | | | X |
| \8 | | | X | \10 | | | X |
Output
X,X,44\,12\,X,X,38\,10\
X,\13,5,8,6\,\16,9,7
X,4\9,3,4,2,11\5,2,3
\8,1,7,\21,4,9,8,X
\12,3,9,10\,\5,2,3,11\
X,\9,2,7,17\,\3,1,2
X,3\15,4,3,8,6\13,4,9
\9,1,8,\16,9,2,5,X
\8,2,6,X,\10,4,6,X
Test 6 (9 * 9) Test
Input
9 9
| X | X | 29\ | 15\ | X | 21\ | 5\ | X | X |
| X | 16\3 | | | 6\3 | | | X | X |
| \23 | | 6 | | | 2 | | 3\ | 4\ |
| \31 | | | 3 | | | 10\4 | | |
| X | 3\8 | | | 22\11 | | | | |
| \25 | | 7 | | | 3 | | 4\ | X |
| \5 | | | 3\13 | | | 2 | | X |
| X | X | \8 | | | \4 | | | X |
| X | X | \3 | | | X | X | X | X |
Output
X,X,29\,15\,X,21\,5\,X,X
X,16\3,1,2,6\3,1,2,X,X
\23,7,6,4,1,2,3,3\,4\
\31,9,8,3,5,6,10\4,1,3
X,3\8,3,5,22\11,5,3,2,1
\25,2,7,1,8,3,4,4\,X
\5,1,4,3\13,6,4,2,1,X
X,X,\8,1,7,\4,1,3,X
X,X,\3,2,1,X,X,X,X
Validator 6 (9 * 9) Validator
Input
9 9
| X | X | 12\ | 23\ | X | 3\ | 26\ | X | X |
| X | \4 | | | 10\10 | | | X | X |
| X | 4\27 | | 9 | | | 5 | 14\ | X |
| \16 | | 5 | | | 15\16 | | | 15\ |
| \6 | | | | 15\10 | | 3 | | |
| X | 3\ | 6\25 | | | 5 | | | |
| \5 | | | 9\3 | | | \8 | | |
| \15 | | | | 4 | | X | X | X |
| X | \10 | | | | | X | X | X |
Output
X,X,12\,23\,X,3\,26\,X,X
X,\4,1,3,10\10,2,8,X,X
X,4\27,4,9,8,1,5,14\,X
\16,1,5,8,2,15\16,9,7,15\
\6,3,2,1,15\10,4,3,1,2
X,3\,6\25,2,6,5,1,4,7
\5,2,3,9\3,2,1,\8,2,6
\15,1,2,5,4,3,X,X,X
X,\10,1,4,3,2,X,X,X
Test 7 (12 * 10) Test
Input
12 10
| X | X | 12\ | 13\ | X | 9\ | 14\ | X | 28\ | 12\ |
| X | 15\15 | | | 12\12 | | | \16 | | |
| \22 | | | | | | | 16\4 | | |
| \12 | | | 10\6 | | | 19\14 | | | |
| X | X | 36\17 | | | 24\17 | | | | 3\ |
| X | 17\7 | | | 19\16 | | | \5 | | |
| \16 | | | \24 | | | | 4\3 | | |
| \17 | | | 4\11 | | | 6\5 | | | X |
| X | 18\12 | | | | 6\3 | | | 21\ | 8\ |
| \6 | | | | 3\3 | | | 16\11 | | |
| \10 | | | \29 | | | | | | |
| \17 | | | \4 | | | \11 | | | X |
Output
X,X,12\,13\,X,9\,14\,X,28\,12\
X,15\15,6,9,12\12,3,9,\16,7,9
\22,7,2,4,3,1,5,16\4,3,1
\12,8,4,10\6,1,5,19\14,7,5,2
X,X,36\17,9,8,24\17,2,9,6,3\
X,17\7,6,1,19\16,7,9,\5,4,1
\16,9,7,\24,7,9,8,4\3,1,2
\17,8,9,4\11,3,8,6\5,3,2,X
X,18\12,2,1,9,6\3,2,1,21\,8\
\6,2,1,3,3\3,2,1,16\11,9,2
\10,7,3,\29,2,1,3,9,8,6
\17,9,8,\4,1,3,\11,7,4,X
Validator 7 (12 * 10) Validator
Input
12 10
| X | 11\ | 12\ | X | X | 7\ | 10\ | X | 32\ | 16\ |
| \17 | | | 27\ | \8 | | | \13 | | |
| \7 | | | | 13\5 | | | 12\12 | | |
| X | X | \6 | | | 12\15 | | | | X |
| X | 23\ | 33\24 | | | | 15\4 | | | 23\ |
| \22 | | | | 9\13 | | | 34\11 | | |
| \29 | | | | | 5\30 | | | | |
| \17 | | | 16\5 | | | 7\24 | | | |
| X | \12 | | | 12\14 | | | | X | X |
| X | 11\17 | | | | 14\5 | | | 7\ | 16\ |
| \3 | | | \6 | | | \23 | | | |
| \15 | | | \12 | | | X | \8 | | |
Output
X,11\,12\,X,X,7\,10\,X,32\,16\
\17,9,8,27\,\8,3,5,\13,6,7
\7,2,4,1,13\5,4,1,12\12,3,9
X,X,\6,2,4,12\15,4,9,2,X
X,23\,33\24,8,9,7,15\4,3,1,23\
\22,6,7,9,9\13,5,8,34\11,5,6
\29,9,5,7,8,5\30,7,6,8,9
\17,8,9,16\5,1,4,7\24,9,7,8
X,\12,3,9,12\14,1,6,7,X,X
X,11\17,2,7,8,14\5,1,4,7\,16\
\3,2,1,\6,1,5,\23,8,6,9
\15,9,6,\12,3,9,X,\8,1,7
Test 8 (18 * 10) Test
Input
18 10
| X | 20\ | 15\ | 11\ | X | X | 19\ | 8\ | X | X |
| \6 | | | | X | 16\4 | | | 17\ | 7\ |
| \19 | | | | 30\30 | | | | | |
| \12 | | | 14\22 | | | | 12\10 | | |
| X | \21 | | | | \10 | | | 23\ | 27\ |
| X | 6\ | 23\17 | | | 9\ | 9\20 | | | |
| \12 | | | \19 | | | | \17 | | |
| \8 | | | 7\ | 14\3 | | | 21\16 | | |
| X | \22 | | | | | 6\11 | | | |
| X | 28\ | 10\12 | | | 14\8 | | | 10\ | X |
| \13 | | | | 12\29 | | | | | 9\ |
| \11 | | | \14 | | | 10\ | \8 | | |
| \9 | | | 9\6 | | | | 4\4 | | |
| \7 | | | | 10\ | \4 | | | 10\ | X |
| X | 7\ | 15\12 | | | 5\7 | | | | 8\ |
| \13 | | | 3\6 | | | | 6\3 | | |
| \16 | | | | | | \12 | | | |
| X | X | \4 | | | X | \7 | | | |
Output
X,20\,15\,11\,X,X,19\,8\,X,X
\6,3,1,2,X,16\4,1,3,17\,7\
\19,8,2,9,30\30,9,2,5,8,6
\12,9,3,14\22,6,7,9,12\10,9,1
X,\21,9,5,7,\10,7,3,23\,27\
X,6\,23\17,9,8,9\,9\20,9,5,6
\12,4,8,\19,9,3,7,\17,9,8
\8,2,6,7\,14\3,1,2,21\16,7,9
X,\22,9,2,6,5,6\11,5,2,4
X,28\,10\12,4,8,14\8,1,7,10\,X
\13,9,3,1,12\29,8,5,9,7,9\
\11,7,4,\14,9,5,10\,\8,2,6
\9,8,1,9\6,3,1,2,4\4,1,3
\7,4,2,1,10\,\4,1,3,10\,X
X,7\,15\12,8,4,5\7,4,1,2,8\
\13,4,9,3\6,2,1,3,6\3,1,2
\16,3,6,2,1,4,\12,4,3,5
X,X,\4,1,3,X,\7,2,4,1
Validator 8 (18 * 10) Validator
Input
18 10
| X | X | 42\ | 4\ | X | X | 11\ | 5\ | X | X |
| X | \4 | | | 8\ | \13 | | | 42\ | X |
| X | 17\6 | | | | 8\11 | | | | 9\ |
| \14 | | | \8 | | | 22\ | \6 | | |
| \16 | | | 16\ | \11 | | | 17\16 | | |
| X | \12 | | | 3\ | \23 | | | | X |
| X | 14\18 | | | | 10\21 | | | | 5\ |
| \17 | | | 6\8 | | | 4\ | \7 | | |
| \15 | | | | 12\7 | | | 10\8 | | |
| X | 11\ | 30\10 | | | 4\8 | | | 36\ | 3\ |
| \16 | | | \4 | | | 11\6 | | | |
| \3 | | | 9\ | 8\5 | | | 3\4 | | |
| X | \19 | | | | \12 | | | | X |
| X | 10\6 | | | | 4\ | \9 | | | 12\ |
| \4 | | | \3 | | | 10\ | \7 | | |
| \14 | | | 9\ | 12\5 | | | 10\17 | | |
| X | \20 | | | | \14 | | | | X |
| X | X | \5 | | | X | \15 | | | X |
Output
X,X,42\,4\,X,X,11\,5\,X,X
X,\4,1,3,8\,\13,9,4,42\,X
X,17\6,2,1,3,8\11,2,1,8,9\
\14,8,6,\8,5,3,22\,\6,4,2
\16,9,7,16\,\11,5,6,17\16,9,7
X,\12,5,7,3\,\23,9,8,6,X
X,14\18,8,9,1,10\21,7,9,5,5\
\17,8,9,6\8,2,6,4\,\7,3,4
\15,6,4,5,12\7,4,3,10\8,7,1
X,11\,30\10,1,9,4\8,1,7,36\,3\
\16,9,7,\4,3,1,11\6,3,1,2
\3,2,1,9\,8\5,3,2,3\4,3,1
X,\19,8,6,5,\12,9,1,2,X
X,10\6,2,3,1,4\,\9,2,7,12\
\4,1,3,\3,2,1,10\,\7,4,3
\14,9,5,9\,12\5,3,2,10\17,8,9
X,\20,4,7,9,\14,8,1,5,X
X,X,\5,2,3,X,\15,9,6,X
Test 9 (15 * 15) Test
Input
15 15
| X | X | X | X | 16\ | 10\ | X | X | X | 3\ | 16\ | X | X | X | X |
| X | 17\ | 3\ | \10 | | | X | X | \9 | | | 24\ | 16\ | X | X |
| \11 | | | 6\13 | | | 7\ | X | \25 | | | | | X | X |
| \12 | | | | 23\3 | | | X | X | X | 4\16 | | | X | X |
| X | X | 29\13 | | | | | 16\ | X | 29\10 | | | X | X | X |
| X | 4\17 | | | | 3\9 | | | 3\8 | | | 16\ | 3\ | X | X |
| \6 | | | \9 | | | 11\17 | | | | \10 | | | 10\ | X |
| \12 | | | 16\ | 3\3 | | | 17\10 | | | 4\10 | | | | 17\ |
| X | \19 | | | | \13 | | | 4\10 | | | 7\ | \10 | | |
| X | X | \8 | | | 3\14 | | | | 23\7 | | | 23\13 | | |
| X | X | X | X | 6\4 | | | \9 | | | 29\13 | | | | X |
| X | X | X | 16\3 | | | X | X | \23 | | | | | 4\ | 16\ |
| X | X | \10 | | | 16\ | 4\ | X | \14 | | | 3\17 | | | |
| X | X | \21 | | | | | X | X | \7 | | | \12 | | |
| X | X | X | X | \10 | | | X | X | \10 | | | X | X | X |
Output
X,X,X,X,16\,10\,X,X,X,3\,16\,X,X,X,X
X,17\,3\,\10,7,3,X,X,\9,2,7,24\,16\,X,X
\11,9,2,6\13,9,4,7\,X,\25,1,9,8,7,X,X
\12,8,1,3,23\3,2,1,X,X,X,4\16,7,9,X,X
X,X,29\13,2,6,1,4,16\,X,29\10,1,9,X,X,X
X,4\17,7,1,9,3\9,2,7,3\8,5,3,16\,3\,X,X
\6,1,5,\9,8,1,11\17,9,1,7,\10,9,1,10\,X
\12,3,9,16\,3\3,2,1,17\10,2,8,4\10,7,2,1,17\
X,\19,8,9,2,\13,5,8,4\10,9,1,7\,\10,2,8
X,X,\8,7,1,3\14,2,9,3,23\7,3,4,23\13,4,9
X,X,X,X,6\4,1,3,\9,1,8,29\13,2,8,3,X
X,X,X,16\3,1,2,X,X,\23,9,7,1,6,4\,16\
X,X,\10,7,3,16\,4\,X,\14,6,8,3\17,9,1,7
X,X,\21,9,2,7,3,X,X,\7,5,2,\12,3,9
X,X,X,X,\10,9,1,X,X,\10,9,1,X,X,X
Validator 9 (15 * 15) Validator
Input
15 15
| X | X | X | 16\ | 3\ | X | X | X | X | X | X | 42\ | 6\ | X | X |
| X | 16\ | 6\9 | | | 23\ | 10\ | X | 17\ | 7\ | \8 | | | X | X |
| \30 | | | | | | | \11 | | | \6 | | | X | X |
| \10 | | | 24\ | \8 | | | \9 | | | 3\10 | | | X | X |
| X | \12 | | | 17\10 | | | 3\ | 16\9 | | | | X | X | X |
| X | X | \15 | | | 6\15 | | | | 6\8 | | | 3\ | X | X |
| X | X | \19 | | | | 23\11 | | | | 7\7 | | | X | X |
| X | X | X | 17\ | 28\9 | | | X | \15 | | | | | X | X |
| X | X | \18 | | | | | 16\ | 4\3 | | | 17\ | 24\ | X | X |
| X | X | \11 | | | 3\17 | | | | 30\17 | | | | X | X |
| X | X | X | \8 | | | 7\19 | | | | 7\17 | | | 7\ | X |
| X | X | X | 7\7 | | | | 17\ | \9 | | | \10 | | | 16\ |
| X | X | \5 | | | \11 | | | \10 | | | 4\ | 3\11 | | |
| X | X | \7 | | | \12 | | | \26 | | | | | | |
| X | X | \9 | | | X | X | X | X | X | \3 | | | X | X |
Output
X,X,X,16\,3\,X,X,X,X,X,X,42\,6\,X,X
X,16\,6\9,7,2,23\,10\,X,17\,7\,\8,5,3,X,X
\30,7,2,9,1,8,3,\11,9,2,\6,4,2,X,X
\10,9,1,24\,\8,6,2,\9,8,1,3\10,9,1,X,X
X,\12,3,9,17\10,9,1,3\,16\9,4,2,3,X,X,X
X,X,\15,7,8,6\15,4,2,9,6\8,1,7,3\,X,X
X,X,\19,8,9,2,23\11,1,7,3,7\7,6,1,X,X
X,X,X,17\,28\9,1,8,X,\15,1,4,8,2,X,X
X,X,\18,8,1,3,6,16\,4\3,2,1,17\,24\,X,X
X,X,\11,9,2,3\17,9,7,1,30\17,2,8,7,X,X
X,X,X,\8,7,1,7\19,9,3,7,7\17,9,8,7\,X
X,X,X,7\7,4,2,1,17\,\9,8,1,\10,9,1,16\
X,X,\5,2,3,\11,2,9,\10,6,4,4\,3\11,2,9
X,X,\7,1,6,\12,4,8,\26,9,2,3,1,4,7
X,X,\9,4,5,X,X,X,X,X,\3,1,2,X,X
Test 10 (7 * 7) Test
Input
7 7
| X | X | 9\ | 39\ | 21\ | 7\ | X |
| X | 3\22 | | | | | X |
| \18 | | | | | | X |
| X | | 6\10 | | | | 3\ |
| X | \9 | | | | 4\ | |
| X | \15 | | | | | |
| X | \14 | | | | | X |
Output
X,X,9\,39\,21\,7\,X
X,3\22,7,9,5,1,X
\18,1,2,8,3,4,X
X,2,6\10,7,1,2,3\
X,\9,1,6,2,4\,2
X,\15,2,5,4,3,1
X,\14,3,4,6,1,X
Validator 10 (7 * 7) Validator
Input
7 7
| X | X | 38\ | X | 28\ | 35\ | X |
| X | 24\ | | \17 | | | X |
| \17 | | | 26\15 | | | 6\ |
| \36 | | | | | | |
| \32 | | | | | | |
| X | \5 | | | \5 | | |
| X | \12 | | | X | | X |
Output
X,X,38\,X,28\,35\,X
X,24\,9,\17,9,8,X
\17,9,8,26\15,8,7,6\
\36,8,7,9,6,5,1
\32,7,6,8,5,4,2
X,\5,3,2,\5,2,3
X,\12,5,7,X,9,X
Solution language
Solution
Stub generator input