diff --git a/src/variety/fillomino.js b/src/variety/fillomino.js index 9a3cf0a41..e79fa6803 100644 --- a/src/variety/fillomino.js +++ b/src/variety/fillomino.js @@ -716,8 +716,17 @@ --numkind; } component.numkind = numkind; - component.number = - numkind === 1 ? filled : numkind === 0 ? clist.length : -1; + if (numkind === 1) { + if (filled === -2) { + component.number = clist.length; + } else { + component.number = filled; + } + } else if (numkind === 0) { + component.number = clist.length; + } else { + component.number = -1; + } component.complete = clist.length === component.number; component.looseborders = null; }, diff --git a/test/variety/fillomino_test.js b/test/variety/fillomino_test.js index eaed53f02..ef60a52e6 100644 --- a/test/variety/fillomino_test.js +++ b/test/variety/fillomino_test.js @@ -46,4 +46,20 @@ describe("Variety:fillomino", function() { center.adjacent.left.setNum(-1); assert.equal(center.adjborder.top.qcmp, 0); }); + + it("detects same size regions with ? properly", function() { + var p = new pzpr.Puzzle(); + p.open("fillomino/5/1"); + p.board.getc(1, 1).setNum(-2); + p.board.getc(3, 1).setNum(-2); + p.board.getb(2, 1).setQans(0); + p.board.getb(4, 1).setQans(1); + p.board.getc(5, 1).setNum(-2); + p.board.getc(7, 1).setNum(-2); + p.board.getb(6, 1).setQans(0); + p.board.getb(8, 1).setQans(1); + p.board.getc(9, 1).setNum(1); + var check = p.check(true); + assert.equal(check[0], "bsSameNum"); + }); });