## TYPED-CHAINS in KAKURO

For fans of Kakuro

### TYPED-CHAINS in KAKURO

TYPED-CHAINS in KAKURO

In another thread (http://forum.enjoysudoku.com/typed-chains-2d-chains-t37823.html), I defined various kinds of typed-chains (typed-bivalue-chains, typed-z-chains, typed-t-whips and typed-whips), that are special cases of the long established untyped versions.

All the examples I gave there are for Sudoku. Indeed, Sudoku is the more natural case for typed-chains, as there are 4 kinds of CSP-Variables, corresponding to the 4 2D-spaces introduced as early as 2007 in "The Hidden Logic of Sudoku".

However, there are many ways the CSP-Variables of a puzzle can be typed. In Kakuro as I modelled it, there are three natural kinds of CSP-Variables:
- rc, representing the white cells
- hrc, representing the combinations allowed for a horizontal sector (and attached to a black cell)
- vrc, representing the combinations allowed for a vertical sector (and attached to a black cell)
Unfortunately, if these 3 "natural" kinds were taken as 3 types, the resulting typed-chains would be of little interest.

A more interesting typing system would allow to restrict chains to sectors*. And that's what I've just done for Kakuro:
For each horizontal sector, represented by it's controller (black) cell (ri, cj) and named correspondingly hricj, the following three kinds of CSP-Variables are assigned the hricj type
- hricj (the variable representing the allowed combinations for this horizontal sector)
- ri'cj' for any white rc-cell (ri' cj') in the sector
- ri'nk' for any rn-cell (ri' nk') in the sector

Similarly, for each vertical sector, represented by it's controller (black) cell (ri, cj) and named correspondingly vricj, 3 similar kinds of CSP-Variables are assigned type vricj

Remark: CSP-Variables corresponding to (white) rc-cells have two types, which is not a problem in CSP-Rules ("type" is not a function but a predicate). I didn't have to make any change to the generic typed-chain rules for making them work with these definitions.

(*) The first time I met the idea of solving a puzzle using only patterns in a single sector at a time was in an example by Mathimagic (http://forum.enjoysudoku.com/24-x-14-kakuro-challenge-t37104.html). I don't know how usual it is to make such a distinction. But that clearly makes a puzzle much simpler to solve. The only interaction between sectors is via assertions and eliminations in the white cells.

Remark: few puzzles are solvable by chain rules limited to a sector at a time.
I have to leave now, but I'll give an example in my next post.
denis_berthier
2010 Supporter

Posts: 1691
Joined: 19 June 2007
Location: Paris

### TYPED-CHAINS in KAKURO - Example

This 10x10 example is puzzle M42942 from http://www.atksolutions.com/games/kakuro.html

The calling function from CSP-Rules is:
Code: Select all
`(solve 10   ;;; horizontal data   28 . . . . . . 12 . . /    39 . . . . . . 9 . . /    B B 17 . . 11 . . . . /    31 . . . . . 23 . . . /    16 . . 19 . . . 14 . . /    22 . . . 15 . . . . . /    19 . . . . 11 . . B B /    5 . . 32 . . . . . . /    9 . . 38 . . . . . . //   ;;; vertical data   7 . . 39 . . . . . . /    16 . . 23 . . . . . . /    30 . . . . 13 . . B B /    33 . . . . . 18 . . . /    6 . . 15 . . . 13 . . /    20 . . . 27 . . . . . /    B B 11 . . 27 . . . . /    23 . . . . . . 5 . . /   38 . . . . . . 6 . . // )`

It has a solution in W3 (I have kept both typed and untyped chains in the solution, in order to show how they easily live together):
Hidden Text: Show
naked-pairs-in-verti-sector: c10{r4 r7}{n3 n5} ==> r6c10 ≠ 5, r3c10 ≠ 5, r3c10 ≠ 3, r2c10 ≠ 5, r2c10 ≠ 3
biv-chain-vr1c6[2]: vr1c6{n15 n24} - r3c6{n5 n4} ==> r2c6 ≠ 4
biv-chain-vr1c6[2]: vr1c6{n24 n15} - r3c6{n4 n5} ==> r2c6 ≠ 5
biv-chain-vr1c9[2]: vr1c9{n123458 n123467} - r5c9{n8 n6} ==> r3c9 ≠ 6, r6c9 ≠ 6
singles
z-chain-hr8c1[2]: r8c3{n3 n2} - hr8c1{n3457 .} ==> r8c5 ≠ 3
whip-hr8c1[2]: r8c3{n2 n3} - hr8c1{n2458 .} ==> r8c5 ≠ 2
naked-single ==> vr7c5 = 567
whip-vr4c6[2]: r7c6{n2 n1} - vr4c6{n249 .} ==> r6c6 ≠ 2, r5c6 ≠ 2
whip-hr8c6[2]: hr8c6{n56 n29} - r8c8{n6 .} ==> r8c7 ≠ 9
whip-hr8c6[2]: hr8c6{n56 n38} - r8c8{n6 .} ==> r8c7 ≠ 8
whip-hr8c6[2]: hr8c6{n38 n56} - r8c8{n8 .} ==> r8c7 ≠ 6
z-chain-vr5c7[2]: r8c7{n5 n2} - r7c7{n2 .} ==> vr5c7 ≠ 24678
whip-hr8c1[2]: hr8c1{n3457 n2467} - r8c2{n5 .} ==> r8c5 ≠ 6
naked-pairs-in-verti-sector: c5{r8 r9}{n5 n7} ==> r10c5 ≠ 7
naked-single ==> r10c5 = 6
singles
biv-chain-hr5c1[2]: r5c3{n4 n3} - hr5c1{n45679 n35689} ==> r5c5 ≠ 4
biv-chain-hr5c1[2]: hr5c1{n45679 n35689} - r5c3{n4 n3} ==> r5c5 ≠ 3
whip-hr6c4[2]: hr6c4{n469 n478} - r6c6{n6 .} ==> r6c5 ≠ 8
whip-vr4c6[2]: vr4c6{n168 n159} - r6c6{n6 .} ==> r5c6 ≠ 9
x-wing-in-horiz-sectors: n9{r4 r5}{c4 c5} ==> r6c5 ≠ 9, r3c5 ≠ 9, r3c4 ≠ 9, r2c5 ≠ 9, r2c4 ≠ 9
biv-chain-hr6c4[2]: hr6c4{n478 n469} - r6c5{n7 n6} ==> r6c6 ≠ 6
biv-chain-vr4c6[2]: vr4c6{n159 n168} - r6c6{n9 n8} ==> r5c6 ≠ 8
naked-pairs-in-horiz-sector: r5{c2 c6}{n5 n6} ==> r5c5 ≠ 6, r5c5 ≠ 5, r5c4 ≠ 6
whip-vr1c2[2]: vr1c2{n34 n16} - r3c2{n4 .} ==> r2c2 ≠ 6
whip-vr1c2[2]: vr1c2{n34 n25} - r3c2{n4 .} ==> r2c2 ≠ 5
whip-vr1c2[2]: vr1c2{n25 n34} - r3c2{n5 .} ==> r2c2 ≠ 4
biv-chain[3]: vr1c7{n569 n578} - r3n9{c7 c3} - r2c3{n9 n7} ==> r2c7 ≠ 7
whip-vr1c7[2]: vr1c7{n569 n578} - r2c7{n9 .} ==> r3c7 ≠ 8
x-wing-in-horiz-sectors: n8{r3 r4}{c4 c5} ==> r5c5 ≠ 8, r5c4 ≠ 8, r2c5 ≠ 8, r2c4 ≠ 8
singles
hidden-pairs-in-horiz-sector: r3{n7 n9}{c3 c7} ==> r3c7 ≠ 6
stte

If we use only typed-chains, it requires typed-whips of length 5:
Hidden Text: Show
singles
naked-pairs-in-verti-sector: c10{r4 r7}{n3 n5} ==> r6c10 ≠ 5, r3c10 ≠ 5, r3c10 ≠ 3, r2c10 ≠ 5, r2c10 ≠ 3
biv-chain-vr1c6[2]: vr1c6{n15 n24} - r3c6{n5 n4} ==> r2c6 ≠ 4
biv-chain-vr1c6[2]: vr1c6{n24 n15} - r3c6{n4 n5} ==> r2c6 ≠ 5
biv-chain-vr1c9[2]: vr1c9{n123458 n123467} - r5c9{n8 n6} ==> r3c9 ≠ 6, r6c9 ≠ 6
z-chain-hr8c1[2]: r8c3{n3 n2} - hr8c1{n3457 .} ==> r8c5 ≠ 3
whip-hr8c1[2]: r8c3{n2 n3} - hr8c1{n2458 .} ==> r8c5 ≠ 2
naked-single ==> vr7c5 = 567
whip-vr4c6[2]: r7c6{n2 n1} - vr4c6{n249 .} ==> r6c6 ≠ 2, r5c6 ≠ 2
whip-hr8c6[2]: hr8c6{n56 n29} - r8c8{n6 .} ==> r8c7 ≠ 9
whip-hr8c6[2]: hr8c6{n56 n38} - r8c8{n6 .} ==> r8c7 ≠ 8
whip-hr8c6[2]: hr8c6{n38 n56} - r8c8{n8 .} ==> r8c7 ≠ 6
z-chain-vr5c7[2]: r8c7{n5 n2} - r7c7{n2 .} ==> vr5c7 ≠ 24678
whip-hr8c1[2]: hr8c1{n3457 n2467} - r8c2{n5 .} ==> r8c5 ≠ 6
naked-pairs-in-verti-sector: c5{r8 r9}{n5 n7} ==> r10c5 ≠ 7
singles
biv-chain-hr5c1[2]: r5c3{n4 n3} - hr5c1{n45679 n35689} ==> r5c5 ≠ 4
biv-chain-hr5c1[2]: hr5c1{n45679 n35689} - r5c3{n4 n3} ==> r5c5 ≠ 3
whip-hr6c4[2]: hr6c4{n469 n478} - r6c6{n6 .} ==> r6c5 ≠ 8
whip-vr4c6[2]: vr4c6{n168 n159} - r6c6{n6 .} ==> r5c6 ≠ 9
x-wing-in-horiz-sectors: n9{r4 r5}{c4 c5} ==> r6c5 ≠ 9, r3c5 ≠ 9, r3c4 ≠ 9, r2c5 ≠ 9, r2c4 ≠ 9
biv-chain-hr6c4[2]: hr6c4{n478 n469} - r6c5{n7 n6} ==> r6c6 ≠ 6
biv-chain-vr4c6[2]: vr4c6{n159 n168} - r6c6{n9 n8} ==> r5c6 ≠ 8
naked-pairs-in-horiz-sector: r5{c2 c6}{n5 n6} ==> r5c5 ≠ 6, r5c5 ≠ 5, r5c4 ≠ 6
whip-vr1c2[2]: vr1c2{n34 n16} - r3c2{n4 .} ==> r2c2 ≠ 6
whip-vr1c2[2]: vr1c2{n34 n25} - r3c2{n4 .} ==> r2c2 ≠ 5
whip-vr1c2[2]: vr1c2{n25 n34} - r3c2{n5 .} ==> r2c2 ≠ 4
z-chain-hr2c1[3]: r2c3{n7 n9} - r2c7{n9 n8} - r2c4{n8 .} ==> hr2c1 ≠ 123589
z-chain-hr2c1[3]: r2c3{n7 n9} - r2c7{n9 n6} - r2c4{n6 .} ==> hr2c1 ≠ 134569
whip-hr2c1[3]: r2c3{n9 n7} - r2c4{n7 n8} - r2c7{n8 .} ==> hr2c1 ≠ 134578
whip-hr2c1[3]: r2c4{n8 n7} - r2c3{n7 n9} - r2c7{n9 .} ==> hr2c1 ≠ 124579
whip-hr2c1[4]: r2c3{n7 n9} - hr2c1{n124678 n123679} - r2c4{n8 n6} - r2c7{n6 .} ==> r2c5 ≠ 7
whip-hr2c1[4]: hr2c1{n123679 n124678} - r2c3{n9 n7} - r2c4{n7 n6} - r2c7{n6 .} ==> r2c5 ≠ 8
whip-vr1c5[2]: vr1c5{n36789 n45789} - r2c5{n6 .} ==> r3c5 ≠ 4
whip-hr2c1[5]: hr2c1{n124678 n123679} - r2c5{n4 n6} - r2c4{n6 n7} - r2c3{n7 n9} - r2c7{n9 .} ==> r2c2 ≠ 3
stte
Last edited by denis_berthier on Fri Jun 19, 2020 5:06 am, edited 1 time in total.
denis_berthier
2010 Supporter

Posts: 1691
Joined: 19 June 2007
Location: Paris

### Re: TYPED-CHAINS in KAKURO

This second example is M13101 from the same website.

Code: Select all
`(solve 10   ;;; horizontal data   B B B 11 . . . . B B /    B B 34 . . . . . . . /    16 . . . B B 22 . . . /    10 . . B 15 . . . B B /    B 37 . . . . . . . B /   B 22 . . . . B 7 . . /    14 . . B B B 13 . . . /    33 . . . . . .  . B B /    B B 27 . . . . B B B //    ;;; vertical data   B B 17 . . B 17 . . B /    B B 31 . . . . . .  B /    B 3 . . 6 . . 15 . . /    10 . . B 4 . . 13 . . /    7 . . 22 . . . 9 . . /    3 . . 16 . . B 4 . . /    18 . . . . . 16 . . B /    B 13 . . 17 . . . B B /    B 17 . . B 3 . . B B // )`

It is in both W3 and TyW3. Here is the solution with typed-chains:
Hidden Text: Show
singles
naked-pairs-in-horiz-sector: r3{c4 c7}{n1 n2} ==> r3c8 ≠ 2, r3c8 ≠ 1, r3c6 ≠ 2, r3c6 ≠ 1, r3c5 ≠ 2, r3c5 ≠ 1
biv-chain-vr8c4[2]: vr8c4{n69 n78} - r10c4{n9 n8} ==> r9c4 ≠ 8
biv-chain-vr8c4[2]: vr8c4{n78 n69} - r10c4{n8 n9} ==> r9c4 ≠ 9
biv-chain-vr8c5[2]: vr8c5{n49 n58} - r10c5{n9 n8} ==> r9c5 ≠ 8
biv-chain-vr8c5[2]: vr8c5{n58 n49} - r10c5{n8 n9} ==> r9c5 ≠ 9
biv-chain-hr5c1[2]: hr5c1{n19 n28} - r5c2{n9 n8} ==> r5c3 ≠ 8
biv-chain-hr5c1[2]: hr5c1{n28 n19} - r5c2{n8 n9} ==> r5c3 ≠ 9
biv-chain-hr7c8[2]: hr7c8{n16 n25} - r7c10{n1 n2} ==> r7c9 ≠ 2
biv-chain-hr7c8[2]: hr7c8{n25 n16} - r7c10{n2 n1} ==> r7c9 ≠ 1
biv-chain-hr8c1[2]: hr8c1{n59 n68} - r8c2{n9 n8} ==> r8c3 ≠ 8
biv-chain-hr8c1[2]: hr8c1{n68 n59} - r8c2{n8 n9} ==> r8c3 ≠ 9
biv-chain-hr3c3[2]: r3c4{n2 n1} - r3c7{n1 n2} ==> hr3c3 ≠ 1345678
z-chain-hr8c7[2]: r8c10{n2 n1} - hr8c7{n247 .} ==> r8c9 ≠ 2
z-chain-hr8c7[2]: r8c8{n9 n7} - hr8c7{n139 .} ==> r8c9 ≠ 9
whip-hr8c7[2]: r8c8{n7 n9} - hr8c7{n157 .} ==> r8c9 ≠ 7
whip-hr7c2[2]: r7c5{n1 n3} - hr7c2{n1489 .} ==> r7c4 ≠ 1, r7c3 ≠ 1
cell-to-horiz-ctr ==> hr7c2 ≠ 1678
whip-hr7c2[2]: hr7c2{n3568 n2389} - r7c4{n4 .} ==> r7c3 ≠ 2
whip-hr7c2[2]: r7c5{n3 n1} - hr7c2{n2389 .} ==> r7c3 ≠ 3
whip-hr5c5[2]: r5c7{n7 n9} - hr5c5{n267 .} ==> r5c8 ≠ 7, r5c6 ≠ 7
whip-hr5c5[2]: r5c7{n9 n7} - hr5c5{n159 .} ==> r5c6 ≠ 9
biv-chain-vr4c6[2]: r5c6{n6 n5} - vr4c6{n679 n589} ==> r6c6 ≠ 6, r7c6 ≠ 6
biv-chain-vr4c6[2]: vr4c6{n679 n589} - r5c6{n6 n5} ==> r6c6 ≠ 5, r7c6 ≠ 5
z-chain-hr5c5[2]: hr5c5{n357 n267} - r5c6{n5 .} ==> r5c8 ≠ 6
whip-hr5c5[2]: r5c6{n5 n6} - hr5c5{n159 .} ==> r5c8 ≠ 5
whip-hr4c1[2]: r4c4{n2 n1} - hr4c1{n259 .} ==> r4c3 ≠ 2
whip-hr4c1[2]: r4c4{n1 n2} - hr4c1{n169 .} ==> r4c3 ≠ 1
whip-hr4c1[2]: r4c2{n9 n8} - hr4c1{n169 .} ==> r4c3 ≠ 9
whip-hr4c1[2]: r4c2{n8 n9} - hr4c1{n178 .} ==> r4c3 ≠ 8
z-chain-vr3c3[2]: r4c3{n7 n6} - r8c3{n6 .} ==> vr3c3 ≠ 134689
z-chain-vr3c3[2]: r4c3{n7 n5} - r8c3{n5 .} ==> vr3c3 ≠ 234589
whip-vr5c9[2]: r7c9{n5 n6} - vr5c9{n359 .} ==> r8c9 ≠ 5, r6c9 ≠ 5
whip-vr5c9[2]: r8c9{n4 n3} - vr5c9{n458 .} ==> r6c9 ≠ 4
whip-vr5c9[2]: r8c9{n3 n4} - vr5c9{n359 .} ==> r6c9 ≠ 3
whip-vr5c9[2]: r7c9{n6 n5} - vr5c9{n368 .} ==> r6c9 ≠ 6
whip-vr1c8[2]: vr1c8{n12456 n12348} - r4c8{n5 .} ==> r6c8 ≠ 8, r3c8 ≠ 8
whip-vr5c4[2]: vr5c4{n24 n15} - r7c4{n2 .} ==> r6c4 ≠ 5
whip-vr2c9[2]: vr2c9{n67 n49} - r4c9{n5 .} ==> r3c9 ≠ 9
whip-vr1c6[2]: vr1c6{n25 n34} - r2c6{n1 .} ==> r3c6 ≠ 3
whip-vr1c5[2]: vr1c5{n28 n37} - r2c5{n1 .} ==> r3c5 ≠ 3
whip-vr1c6[2]: vr1c6{n34 n25} - r3c6{n4 .} ==> r2c6 ≠ 5
singles
hidden-pairs-in-verti-sector: c8{n1 n2}{r5 r6} ==> r6c8 ≠ 7, r6c8 ≠ 6, r6c8 ≠ 4, r6c8 ≠ 3, r5c8 ≠ 3
biv-chain-vr1c8[2]: vr1c8{n12456 n12357} - r4c8{n6 n7} ==> r3c8 ≠ 7
biv-chain-vr1c8[2]: r4c8{n6 n7} - vr1c8{n12456 n12357} ==> r3c8 ≠ 6
biv-chain-hr3c3[2]: hr3c3{n1235689 n1234789} - r3c9{n6 n7} ==> r3c5 ≠ 7
singles
naked-triplets-in-horiz-sector: r6{c6 c7 c9}{n8 n9 n7} ==> r6c3 ≠ 9, r6c3 ≠ 8, r6c3 ≠ 7
z-chain-hr6c2[3]: r6c8{n1 n2} - hr6c2{n1345789 n1246789} - r6c5{n3 .} ==> r6c4 ≠ 1
cell-to-verti-ctr ==> vr5c4 ≠ 15
naked-single ==> vr5c4 = 24
whip-hr7c2[2]: r7c4{n4 n2} - hr7c2{n1489 .} ==> r7c3 ≠ 4
z-chain-hr6c2[3]: r6c8{n1 n2} - hr6c2{n1345789 n1246789} - r6c5{n3 .} ==> r6c3 ≠ 1
z-chain-hr9c1[3]: r9c2{n9 n8} - hr9c1{n1235679 n1234689} - r9c8{n7 .} ==> r9c3 ≠ 9
t-whip-hr9c1[3]: r9c8{n7 n9} - r9c2{n9 n8} - hr9c1{n1235679 .} ==> r9c3 ≠ 7, r9c4 ≠ 7
singles
biv-chain-hr9c1[2]: hr9c1{n1245678 n1235679} - r9c2{n8 n9} ==> r9c8 ≠ 9
stte
Last edited by denis_berthier on Fri Jun 19, 2020 5:08 am, edited 1 time in total.
denis_berthier
2010 Supporter

Posts: 1691
Joined: 19 June 2007
Location: Paris

### Re: TYPED-CHAINS in KAKURO

Hi Denis,

Do you think that these additional methods might make a difference when applied to computationally difficult puzzles? (such as these)

Cheers
MM

Mathimagics
2017 Supporter

Posts: 1583
Joined: 27 May 2015
Location: Canberra

### Re: TYPED-CHAINS in KAKURO

Mathimagics wrote:Hi Denis,
Do you think that these additional methods might make a difference when applied to computationally difficult puzzles? (such as these)

Hi Mathimagics
Definitely not. Typed-chains are special cases of the corresponding non-typed ones. They add no resolution power.
But, on the contrary, in the present case of Kakuro and with the present definition of types related to sectors, they may help isolate easy puzzles that do not require complex considerations involving several sectors at a time.

Two other points related to the referenced link:
1) CSP-Rules (and any of the included applications) is absolutely not targeted at fast solving. I fear it would be considered terribly slow compared to any really fast solver. The purpose is not only to get a solution but to get a resolution path with the simplest hardest step, a problem exponentially harder.
Just to give you an idea, the puzzle in the last example (M13101) takes :
- 1.25s when only whips are activated
- 1.27s when only whips and Subsets are activated
- 1.52s when only Subsets and all the typed chains are activated
- 1.71s when Subsets and all the typed+untyped chains are activated.
Every additional pattern that has to be tested during resolution has its cost.

2) CSP-Rules is not targeted at the hardest of the hardest puzzles. It is targeted at puzzles solvable by a human solver (and it goes indeed much beyond). In practice, considering my universal T&E-depth classification, this means that CSP-Rules will give:
- a full resolution path for puzzles in T&E(1) or gT&E(1)
- only a classification in some BpB for puzzles in T&E(2)
- nothing beyond
Last edited by denis_berthier on Fri Sep 25, 2020 8:36 am, edited 1 time in total.
denis_berthier
2010 Supporter

Posts: 1691
Joined: 19 June 2007
Location: Paris

### Re: TYPED-CHAINS in KAKURO

Ok, I get it, thanks!

Mathimagics
2017 Supporter

Posts: 1583
Joined: 27 May 2015
Location: Canberra

### Re: TYPED-CHAINS in KAKURO

Hi Mathimagics,
Somewhere, you said you had a Kakuro generator able to find some puzzles solvable in each sector separately (and you gave this http://forum.enjoysudoku.com/24-x-14-kakuro-challenge-t37104.html as an example.
It's unclear to me what exactly you do in each sector, but whips restricted to fixed sectors are not enough for this puzzle.
If it doesn't take too much time, could you generate a few of such puzzles in some readable format, so that I can test them with my new typed-chains?
denis_berthier
2010 Supporter

Posts: 1691
Joined: 19 June 2007
Location: Paris

### Re: TYPED-CHAINS in KAKURO

Hi Denis,

Just to be clear, I classify a puzzle as "linearly solvable" if it can be solved by (sector-based) cell candidate eliminations.

These eliminations are obtained solely by the process of testing, for each candidate value (D) in a cell (R, C), whether or not setting cell (R, C) = D allows the horizontal and vertical sectors that intersect at this cell to be completed to the applicable sum.

The linear solver simply makes multiple passes over the grid, removing candidates, applying forced moves (singles) until either the grid is complete or no more eliminations can be performed. I believe that nearly all puzzles intended for human consumption (ie P&P solving) are linearly solvable.

The simplest format for exchanging Kakuro puzzles is the solution grid. For example here is ATK "M13101", which you mention above, and which is linearly solvable:

Code: Select all
`...1325....2941378871...76991..591...6418729..8239..5295....9318465217....9873...`

I have many, many 24x14 puzzles with this property, and here are a few ...

Example 1: Show
Code: Select all
`94.9864.26.417564321.45293.8954321.31..97861..2495618643215.57983.21..4396875.79.938.83462763942.87124365123.8432.315..35142.87.79916.2769.49..8679.613.5398..15.9562.14631.86.97542..732.4978.87699854763.79845846312.417.28.5463721..41.19782.9265783678593..13692..97.6312485.52316.153897231.29.6849.31`

Example 2: Show
Code: Select all
`..573124.824.25684379.968756897.6825471132659874.123.89.271534.6282431..3126549417.97.6879531.24631.13....213.6539874976524831.451451.75462193.26.586.795.47.93167284.421142.9254637182847593.512....69.84976.2432516.17.2695631298..6587951.576829.48.984.4321875697634859.251348421.14938256.913.217593..`

Example 3: Show
Code: Select all
`896.14253.19.152643789.289.214356789.16973.21564893.61.35789.1523..496.3215.799862.24196358431.7613.21..512347.4876597654892.6452832.268194.217..2135.6394..679.134257.7921345.7428956527894.514237..49.6789.12389526147.279896.3821.215..6231.32418.13.79685324.13248.798513264.239.798351264.15.67958.321`

Cheers
MM

Mathimagics
2017 Supporter

Posts: 1583
Joined: 27 May 2015
Location: Canberra

### Re: TYPED-CHAINS in KAKURO

Mathimagics wrote:Hi Denis,
Just to be clear, I classify a puzzle as "linearly solvable" if it can be solved by (sector-based) cell candidate eliminations.
These eliminations are obtained solely by the process of testing, for each candidate value (D) in a cell (R, C), whether or not setting cell (R, C) = D allows the horizontal and vertical sectors that intersect at this cell to be completed to the applicable sum.
The linear solver simply makes multiple passes over the grid, removing candidates, applying forced moves (singles) until either the grid is complete or no more eliminations can be performed.

I see. That defines a higher level of difficulty than my current typed-chains, though still in the easy to medium range. I think I could define a second way of typing the chains that could cover (most of) this. When I have time, I'll code it in KakuRules (I have no problem in keeping two different typing systems and leaving the choice to the user).

Mathimagics wrote:I believe that nearly all puzzles intended for human consumption (ie P&P solving) are linearly solvable.

You may be right if you consider extra large puzzles as the 3 you mentioned. But not for normal sized puzzles.

Mathimagics wrote:The simplest format for exchanging Kakuro puzzles is the solution grid.

This format is ambiguous, unless you mean that all the horizontal and vertical sums must be given (which is very restrictive).
For a more general format, I suggest something along the lines of mine (in the examples above), inspired by crosswords (separate definitions for rows and columns).
denis_berthier
2010 Supporter

Posts: 1691
Joined: 19 June 2007
Location: Paris

### Re: TYPED-CHAINS in KAKURO

For puzzles where sums may be omitted, or for any reason the solution grid itself is not appropriate, I use this format:

Code: Select all
`XXXXXX..XXXXXXXXXXX.XXXXXX.XX.XX.XXXXXX.XXXXX.XX.XX.XXXXXXXX..XXXXX.XXXXXXXX.XXXXX..XXXXXXXX.XX.XX.XXXXX.XXXXXX.XX.XX.XXXXXX.XXXXXXXXXXX..XXXXXXHS = 35 28 29 12 13 3 16 17 14 15 6 10 44 29 30 30 15 42 8 17 16 12 17 16 12 8 13 41 28 38VS = 11 38 28 27 17 34 21 8 28 12 25 19 7 38 40 17 22 29 14 14 9 9 34 10 24 18 37 24`

This is (or was at some point) ATK's "H54261".

Mathimagics
2017 Supporter

Posts: 1583
Joined: 27 May 2015
Location: Canberra