Я выкладываю плитку размером 15 х 15 штук с гексомино. Чтобы заполнить прямоугольник 15 х 15 гексомино, мне нужно использовать все 35 гексомино, одну дубликатную фигуру и квадрат 3х3. Итак, я создал квадрат 3х3 и сделал одну дублирующую фигуру случайным образом. Когда я тестировал на маленькой доске, такой как 9 X 15, я могу быстро найти ответ, как вы видите.
У каждого гексомино есть свой собственный ключ от 0 до 36 и переменная 'mark', чтобы проверить, используется ли он.
Однако проблема заключается в том, что поиск решения 15 x 15 занимает слишком много времени. Чтобы проверить это, я спал с включенным сценарием, но не смог получить результат. Я дважды проверил все координаты гексомино, поэтому я думаю, что этот алгоритм просто не годится.
Поэтому я использовал Python с другим методом, и я мог найти ответ
Это мой js код, имеющий проблему.
colors = [
"#EEAAAA", "#DDBB99", "#CCCC88", "#BBDD99", "#AAEEAA", "#99DDBB", "#B22222",
"#88CCCC", "#99BBDD", "#AAAAEE", "#BB99DD", "#CC88CC", "#DD99BB", "#663399",
"#C0C0C0" ,"#4682B4", "#D2B48C", "#2E8B57", "#FF0000", "#B0E0E6", "#DB7093",
"#FFDAB9", "green", "#EEE8AA", "gray", "#191970", "#00FA9A", "#48D1CC",
"#C71585", "#800000", "#FFA07A", "orange", "yellow", "#2F4F4F", "#FF8C00",
"#556B2F", "white"
]; // Colors to distinguish hexomino
function setup() {
createCanvas(2500, 2500);
puzzle = new Puzzle();
puzzle.run(9,15);
}
function draw() {
paint(puzzle);
}
function Square(x, y) {
this.x = x;
this.y = y;
this.move = function(row, column) {
return new Square(this.x + column, this.y + row);
};
this.check = function(width, height) {
if (this.x < 0 || this.y < 0) {
return false;
} else {
if (this.x >= width || this.y >= height) {
return false;
} else {
return true;
}
}
};
}
function Hexomino(key, squares) {
this.key = key;
this.squares = squares.map(function(square) {
return new Square(square[0], square[1]);
});
this.move = function(row, column) {
var hexo = new Hexomino(this.key, []);
hexo.squares = this.squares.map(function(square) {
return square.move(row, column);
});
return hexo;
};
}
//Hexominoes Coordinates
function Hexominos() {
this.shapes = [
[ // #0 = 1 figure , 9 cells
new Hexomino( 0, [[0,0],[0,1],[0,2],[1,0],[1,1],[1,2],[2,0],[2,1],[2,2]]),
],
[ // #1 = 2
new Hexomino( 1, [[0,0], [0, 1], [0, 2], [0, 3], [0,4], [0,5]]),
new Hexomino( 1, [[0,0], [1, 0], [2, 0], [3, 0], [4,0], [5,0]]),
],
[ // #2 = 8
new Hexomino( 2, [[0,1], [1,1], [2,1], [3, 1], [4,1], [4,0]]),
new Hexomino( 2, [[0,0], [1,0], [1,1], [1, 2], [1,3], [1,4]]),
new Hexomino( 2, [[0,1], [0,0], [1,0], [2, 0], [3,0], [4,0]]),
new Hexomino( 2, [[0,0], [0,1], [0,2], [0, 3], [0,4], [1,4]]),
new Hexomino( 2, [[0,0], [0,1], [1,1], [2,1], [3,1], [4,1]]),
new Hexomino( 2, [[0,4], [1,4], [1,3], [1,2], [1,1], [1,0]]),
new Hexomino( 2, [[0,0], [1,0], [2,0], [3,0], [4,0], [4,1]]),
new Hexomino( 2, [[0,0], [0,1], [0,2], [0,3], [0,4], [1,0]]),
],
[ // #3 = 8
new Hexomino( 3, [[0,1], [1,1], [2,1], [3,1],[3,0],[4,1]]),
new Hexomino( 3, [[0,0], [0,1], [0,2], [0,3],[1,3],[0,4]]),
new Hexomino( 3, [[0,1], [1,1], [1,0], [1,2],[1,3],[1,4]]),
new Hexomino( 3, [[0,0], [1,0], [1,1], [2,0],[3,0],[4,0]]),
new Hexomino( 3, [[0,1], [1,1], [1,0], [2,1],[3,1],[4,1]]),
new Hexomino( 3, [[0,3], [1,3], [1,4], [1,2],[1,1],[1,0]]),
new Hexomino( 3, [[0,0], [1,0], [2,0], [3,0],[3,1],[4,0]]),
new Hexomino( 3, [[0,0], [0,1], [1,1], [0,2],[0,3],[0,4]]),
],
[ // #4 = 4
new Hexomino( 4, [[0,1], [1, 1], [2, 1], [2,0], [3,1], [4,1]]),
new Hexomino( 4, [[0,0], [1, 0], [2, 0], [2,1], [3,0], [4,0]]),
new Hexomino( 4, [[0,2], [1, 2], [1, 3], [1,4], [1,1], [1,0]]),
new Hexomino( 4, [[0,0], [0, 1], [0, 2], [1,2], [0,3], [0,4]]),
],
[ // #5 = 8
new Hexomino( 5, [[0,1], [1,1],[2,1],[3,1],[3,0],[4,0]]),
new Hexomino( 5, [[0,1], [1,1],[1,0],[2,0],[3,0],[4,0]]),
new Hexomino( 5, [[0,0], [0,1],[0,2],[0,3],[1,3],[1,4]]),
new Hexomino( 5, [[0,0], [0,1],[1,1],[1,2],[1,3],[1,4]]),
new Hexomino( 5, [[0,0], [1,0],[1,1],[2,1],[3,1],[4,1]]),
new Hexomino( 5, [[0,0], [1,0],[2,0],[3,0],[3,1],[4,1]]),
new Hexomino( 5, [[0,4], [0,3],[1,3],[1,2],[1,1],[1,0]]),
new Hexomino( 5, [[0,4], [0,3],[0,2],[0,1],[1,1],[1,0]]),
],
[ // #6 = 8
new Hexomino( 6, [[0,1],[1,1],[2,1],[3,1],[2,0],[3,0]]),
new Hexomino( 6, [[0,0],[0,1],[1,0],[1,1],[1,2],[1,3]]),
new Hexomino( 6, [[0,0],[0,1],[1,0],[1,1],[2,0],[3,0]]),
new Hexomino( 6, [[0,0],[0,1],[0,2],[0,3],[1,2],[1,3]]),
new Hexomino( 6, [[0,0],[0,1],[1,0],[1,1],[2,1],[3,1]]),
new Hexomino( 6, [[0,2],[0,3],[1,3],[1,2],[1,1],[1,0]]),
new Hexomino( 6, [[0,0],[1,0],[2,0],[3,0],[2,1],[3,1]]),
new Hexomino( 6, [[0,0],[0,1],[0,2],[0,3],[1,0],[1,1]]),
],
[ // #7 = 8
new Hexomino( 7, [[0,1],[1,1],[1,0],[2,1],[3,1],[3,0]]),
new Hexomino( 7, [[0,0],[0,2],[1,0],[1,1],[1,2],[1,3]]),
new Hexomino( 7, [[0,0],[0,1],[1,0],[2,0],[2,1],[3,0]]),
new Hexomino( 7, [[0,0],[0,1],[0,2],[0,3],[1,1],[1,3]]),
new Hexomino( 7, [[0,0],[2,0],[0,1],[1,1],[2,1],[3,1]]),
new Hexomino( 7, [[0,1],[0,3],[1,0],[1,1],[1,2],[1,3]]),
new Hexomino( 7, [[0,0],[1,0],[2,0],[3,0],[1,1],[3,1]]),
new Hexomino( 7, [[0,0],[0,1],[0,2],[0,3],[1,0],[1,2]]),
],
// ----------------------------------------------------------------------------------------
[ // #8 = 4
new Hexomino( 8, [[0,0],[3,0],[0,1],[1,1],[2,1],[3,1]]),
new Hexomino( 8, [[0,0],[0,3],[1,0],[1,1],[1,2],[1,3]]),
new Hexomino( 8, [[0,0],[0,1],[1,0],[2,0],[3,0],[3,1]]),
new Hexomino( 8, [[0,0],[0,1],[0,2],[0,3],[1,0],[1,3]]),
],
[ // #9 = 4
new Hexomino( 9, [[1,0],[2,0],[0,1],[1,1],[2,1],[3,1]]),
new Hexomino( 9, [[0,1],[0,2],[1,0],[1,1],[1,2],[1,3]]),
new Hexomino( 9, [[0,0],[1,0],[2,0],[3,0],[1,1],[2,1]]),
new Hexomino( 9, [[0,0],[0,1],[0,2],[0,3],[1,1],[1,2]]),
],
[ // #10 = 8
new Hexomino( 10, [[0,2],[1,2],[2,2],[3,2],[3,1],[3,0]]),
new Hexomino( 10, [[0,0],[1,0],[2,0],[2,1],[2,2],[2,3]]),
new Hexomino( 10, [[0,0],[0,1],[0,2],[1,0],[2,0],[3,0]]),
new Hexomino( 10, [[0,0],[0,1],[0,2],[0,3],[1,3],[2,3]]),
new Hexomino( 10, [[0,0],[0,1],[0,2],[1,2],[2,2],[3,2]]),
new Hexomino( 10, [[0,3],[1,3],[2,3],[2,2],[2,1],[2,0]]),
new Hexomino( 10, [[0,0],[1,0],[2,0],[3,0],[3,1],[3,2]]),
new Hexomino( 10, [[0,0],[0,1],[0,2],[0,3],[1,0],[2,0]]),
],
[ // #11 = 8
new Hexomino( 11, [[0,2],[1,2],[2,2],[3,2],[2,1],[2,0]]),
new Hexomino( 11, [[0,1],[1,1],[2,0],[2,1],[2,2],[2,3]]),
new Hexomino( 11, [[0,0],[1,0],[1,1],[1,2],[2,0],[3,0]]),
new Hexomino( 11, [[0,0],[0,1],[0,2],[0,3],[1,2],[2,2]]),
new Hexomino( 11, [[0,2],[1,2],[1,1],[1,0],[2,2],[3,2]]),
new Hexomino( 11, [[0,2],[1,2],[2,0],[2,1],[2,2],[2,3]]),
new Hexomino( 11, [[0,0],[1,0],[2,0],[3,0],[2,1],[2,2]]),
new Hexomino( 11, [[0,0],[0,1],[0,2],[0,3],[1,1],[2,1]]),
],
[ // #12 = 4
new Hexomino( 12, [[0,1],[1,1],[2,1],[3,1],[3,2],[3,0]]),
new Hexomino( 12, [[0,0],[1,0],[1,1],[1,2],[1,3],[2,0]]),
new Hexomino( 12, [[0,0],[0,1],[0,2],[1,1],[2,1],[3,1]]),
new Hexomino( 12, [[1,0],[1,1],[1,2],[1,3],[0,3],[2,3]]),
],
[ // #13 = 8
new Hexomino( 13, [[0,1],[1,1],[2,1],[2,2],[3,1],[3,0]]),
new Hexomino( 13, [[0,0],[1,0],[1,1],[1,2],[1,3],[2,1]]),
new Hexomino( 13, [[0,1],[0,2],[1,1],[1,0],[2,1],[3,1]]),
new Hexomino( 13, [[1,0],[1,1],[1,2],[0,2],[1,3],[2,3]]),
new Hexomino( 13, [[0,0],[0,1],[1,1],[1,2],[2,1],[3,1]]),
new Hexomino( 13, [[0,3],[1,3],[1,2],[2,2],[1,1],[1,0]]),
new Hexomino( 13, [[0,1],[1,1],[2,1],[2,0],[3,1],[3,2]]),
new Hexomino( 13, [[0,1],[1,1],[1,0],[2,0],[1,2],[1,3]]),
],
[ // #14 = 8
new Hexomino( 14, [[0,1],[1,1],[1,2],[2,1],[3,1],[3,0]]),
new Hexomino( 14, [[0,0],[1,0],[1,1],[1,2],[2,2],[1,3]]),
new Hexomino( 14, [[0,1],[0,2],[1,1],[2,1],[2,0],[3,1]]),
new Hexomino( 14, [[0,1],[1,0],[1,1],[1,2],[1,3],[2,3]]),
new Hexomino( 14, [[0,0],[0,1],[1,1],[2,1],[3,1],[2,2]]),
new Hexomino( 14, [[0,3],[1,3],[1,2],[1,1],[2,1],[1,0]]),
new Hexomino( 14, [[0,1],[1,0],[1,1],[2,1],[3,1],[3,2]]),
new Hexomino( 14, [[0,2],[1,2],[1,3],[1,1],[1,0],[2,0]]),
],
// --------------------------------------------------------------------------------------------
[ // #15 = 4
new Hexomino( 15, [[0,1],[0,2],[1,1],[2,1],[3,1],[3,0]]),
new Hexomino( 15, [[0,0],[1,0],[1,1],[1,2],[1,3],[2,3]]),
new Hexomino( 15, [[0,0],[0,1],[1,1],[2,1],[3,1],[3,2]]),
new Hexomino( 15, [[0,3],[1,3],[1,2],[1,1],[1,0],[2,0]]),
],
[ // #16 = 4
new Hexomino( 16, [[0,1],[1,1],[1,2],[2,1],[2,0],[3,1]]),
new Hexomino( 16, [[0,1],[1,1],[1,0],[1,2],[1,3],[2,2]]),
new Hexomino( 16, [[0,1],[1,1],[1,0],[2,1],[2,2],[3,1]]),
new Hexomino( 16, [[0,2],[1,2],[1,3],[1,1],[2,1],[1,0]]),
],
[ // #17 = 4
new Hexomino( 17, [[0,1],[1,1],[2,1],[2,0],[2,2],[3,1]]),
new Hexomino( 17, [[0,1],[1,1],[1,0],[1,2],[1,3],[2,1]]),
new Hexomino( 17, [[0,1],[1,1],[1,0],[1,3],[2,1],[3,1]]),
new Hexomino( 17, [[0,2],[1,0],[1,1],[1,2],[2,2],[1,3]]),
],
[ // #18 = 8
new Hexomino( 18, [[0,2],[1,2],[2,2],[2,1],[2,0],[3,1]]),
new Hexomino( 18, [[0,1],[1,1],[1,0],[2,1],[2,2],[2,3]]),
new Hexomino( 18, [[0,1],[1,1],[1,2],[1,0],[2,0],[3,0]]),
new Hexomino( 18, [[0,0],[0,1],[0,2],[1,2],[1,3],[2,2]]),
new Hexomino( 18, [[0,1],[1,0],[1,1],[1,2],[2,2],[3,2]]),
new Hexomino( 18, [[0,2],[1,2],[1,3],[2,2],[2,1],[2,0]]),
new Hexomino( 18, [[0,0],[1,0],[2,0],[2,1],[3,1],[2,2]]),
new Hexomino( 18, [[1,0],[0,1],[0,2],[0,3],[1,1],[2,1]]),
],
[ // #19 = 8
new Hexomino( 19, [[0,0],[2,0],[3,0],[0,1],[1,1],[2,1]]),
new Hexomino( 19, [[0,0],[0,1],[1,1],[1,2],[1,3],[0,3]]),
new Hexomino( 19, [[0,1],[1,1],[1,0],[2,0],[3,0],[3,1]]),
new Hexomino( 19, [[0,0],[1,0],[0,1],[0,2],[1,2],[1,3]]),
new Hexomino (19, [[0,0],[1,0],[1,1],[2,1],[3,1],[3,0]]),
new Hexomino (19, [[0,0],[1,0],[1,1],[1,2],[0,2],[0,3]]),
new Hexomino (19, [[0,0],[0,1],[1,0],[2,0],[2,1],[3,1]]),
new Hexomino (19, [[0,1],[0,2],[0,3],[1,3],[1,1],[1,0]]),
],
[ // #20 = 4
new Hexomino( 20, [[0,1],[1,1],[2,1],[2,0],[3,0],[4,0]]),
new Hexomino( 20, [[0,0],[0,1],[0,2],[1,2],[1,3],[1,4]]),
new Hexomino( 20, [[0,0],[1,0],[2,0],[2,1],[3,1],[4,1]]),
new Hexomino( 20, [[1,0],[1,1],[1,2],[0,2],[0,3],[0,4]]),
],
[ // #21 = 4 figures, set to 12 cells (duplicate)
// new Hexomino( 21, [[0,1],[1,1],[2,1],[1,0],[2,0],[3,0]]),
// new Hexomino( 21, [[0,0],[0,1],[0,2],[1,1],[1,2],[1,3]]),
// new Hexomino( 21, [[0,0],[1,0],[2,0],[1,1],[2,1],[3,1]]),
// new Hexomino( 21, [[0,1],[0,2],[0,3],[1,0],[1,1],[1,2]]),
new Hexomino( 21, [[0,1],[1,1],[2,1],[3,1],[4,1],[5,1],[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]),
new Hexomino( 21, [[0,0],[0,1],[0,2],[0,3],[0,4],[0,5],[1,1],[2,1],[3,1],[4,1],[5,1],[6,1]]),
new Hexomino( 21, [[0,0],[1,0],[2,0],[3,0],[4,0],[5,0],[1,1],[2,1],[3,1],[4,1],[5,1],[6,1]]),
new Hexomino( 21, [[0,1],[0,2],[0,3],[0,4],[0,5],[0,6],[1,5],[1,4],[1,3],[1,2],[1,1],[1,0]]),
],
// --------------------------------------------------------------------------------------------------
[ // #22 = 2
new Hexomino( 22, [[0,0],[1,0],[2,0],[0,1],[1,1],[2,1]]),
new Hexomino( 22, [[0,0],[0,1],[0,2],[1,0],[1,1],[1,2]]),
],
[ // #23 = 8
new Hexomino( 23, [[0,1],[1,1],[2,1],[2,2],[2,0],[3,0]]),
new Hexomino( 23, [[0,0],[0,1],[1,1],[2,1],[1,2],[1,3]]),
new Hexomino( 23, [[0,2],[1,2],[1,1],[1,0],[2,1],[3,1]]),
new Hexomino( 23, [[0,2],[1,0],[1,1],[1,2],[2,2],[2,3]]),
new Hexomino( 23, [[0,0],[1,0],[1,1],[1,2],[2,1],[3,1]]),
new Hexomino( 23, [[0,2],[0,3],[1,2],[2,2],[1,1],[1,0]]),
new Hexomino( 23, [[0,1],[1,1],[2,1],[2,0],[2,2],[3,2]]),
new Hexomino( 23, [[0,1],[1,1],[2,1],[2,0],[1,2],[1,3]]),
],
[ // #24 = 8
new Hexomino( 24, [[0,1],[1,1],[2,1],[2,2],[1,0],[2,0]]),
new Hexomino( 24, [[0,0],[0,1],[1,0],[2,0],[1,1],[1,2]]),
new Hexomino( 24, [[0,0],[0,1],[0,2],[1,2],[1,1],[2,1]]),
new Hexomino( 24, [[0,2],[1,0],[1,1],[1,2],[2,1],[2,2]]),
new Hexomino( 24, [[0,0],[1,0],[0,1],[1,1],[2,1],[0,2]]),
new Hexomino( 24, [[0,1],[0,2],[1,2],[1,1],[1,0],[2,2]]),
new Hexomino( 24, [[0,1],[1,1],[1,2],[2,2],[2,1],[2,0]]),
new Hexomino( 24, [[0,0],[1,0],[2,0],[1,1],[1,2],[2,1]]),
],
[ // #25 = 8
new Hexomino( 25, [[0,1],[1,1],[1,2],[2,1],[2,0],[3,0]]),
new Hexomino( 25, [[0,0],[0,1],[1,1],[1,2],[2,2],[1,3]]),
new Hexomino( 25, [[0,2],[1,2],[1,1],[2,1],[2,0],[3,1]]),
new Hexomino( 25, [[0,1],[1,0],[1,1],[1,2],[2,2],[2,3]]),
new Hexomino( 25, [[0,0],[1,0],[1,1],[2,1],[3,1],[2,2]]),
new Hexomino( 25, [[0,3],[0,2],[1,2],[1,1],[2,1],[1,0]]),
new Hexomino( 25, [[0,1],[1,1],[1,0],[2,1],[2,2],[3,2]]),
new Hexomino( 25, [[0,2],[1,2],[1,3],[1,1],[2,1],[2,0]]),
],
[ // #26 = 8
new Hexomino( 26, [[0,2],[1,2],[2,2],[2,1],[2,0],[3,0]]),
new Hexomino( 26, [[0,0],[0,1],[1,1],[2,1],[2,2],[2,3]]),
new Hexomino( 26, [[0,2],[1,2],[1,1],[1,0],[2,0],[3,0]]),
new Hexomino( 26, [[0,0],[0,1],[0,2],[1,2],[2,2],[2,3]]),
new Hexomino( 26, [[0,0],[1,0],[1,1],[1,2],[2,2],[3,2]]),
new Hexomino( 26, [[0,3],[0,2],[1,2],[2,2],[2,1],[2,0]]),
new Hexomino( 26, [[0,0],[1,0],[2,0],[2,1],[2,2],[3,2]]),
new Hexomino( 26, [[0,3],[0,2],[0,1],[1,1],[2,1],[2,0]]),
],
[ // #27 = 8
new Hexomino( 27, [[0,2],[1,2],[2,2],[2,1],[3,1],[3,0]]),
new Hexomino( 27, [[0,0],[1,0],[1,1],[2,1],[2,2],[2,3]]),
new Hexomino( 27, [[0,2],[0,1],[1,1],[1,0],[2,0],[3,0]]),
new Hexomino( 27, [[0,0],[0,1],[0,2],[1,2],[1,3],[2,3]]),
new Hexomino( 27, [[0,0],[0,1],[1,1],[1,2],[2,2],[3,2]]),
new Hexomino( 27, [[0,3],[1,3],[1,2],[2,2],[2,1],[2,0]]),
new Hexomino( 27, [[0,0],[1,0],[2,0],[2,1],[3,1],[3,2]]),
new Hexomino( 27, [[0,3],[0,2],[0,1],[1,1],[1,0],[2,0]]),
],
[ // #28 = 8
new Hexomino( 28, [[0,2],[1,2],[2,2],[2,1],[2,0],[1,0]]),
new Hexomino( 28, [[0,1],[0,0],[1,0],[2,0],[2,1],[2,2]]),
new Hexomino( 28, [[0,0],[0,1],[0,2],[1,2],[1,0],[2,0]]),
new Hexomino( 28, [[0,0],[0,1],[0,2],[1,2],[2,2],[2,1]]),
new Hexomino( 28, [[0,0],[0,1],[0,2],[1,2],[2,2],[1,0]]),
new Hexomino( 28, [[0,1],[0,2],[1,2],[2,2],[2,1],[2,0]]),
new Hexomino( 28, [[0,0],[1,0],[2,0],[2,1],[2,2],[1,2]]),
new Hexomino( 28, [[0,2],[0,1],[0,0],[1,0],[2,0],[2,1]]),
],
[ // #29 = 8
new Hexomino( 29, [[0,2],[1,2],[2,2],[1,1],[1,0],[2,0]]),
new Hexomino( 29, [[0,0],[0,1],[1,1],[2,1],[2,2],[2,0]]),
new Hexomino( 29, [[0,0],[1,0],[2,0],[1,1],[1,2],[0,2]]),
new Hexomino( 29, [[0,0],[0,1],[0,2],[1,1],[2,1],[2,2]]),
new Hexomino( 29, [[0,0],[1,0],[1,1],[1,2],[0,2],[2,2]]),
new Hexomino( 29, [[0,2],[0,1],[1,1],[2,1],[2,2],[2,0]]),
new Hexomino( 29, [[0,0],[1,0],[2,0],[1,1],[1,2],[2,2]]),
new Hexomino( 29, [[0,0],[0,1],[0,2],[1,1],[2,1],[2,0]]),
],
[ // #30 = 4
new Hexomino( 30, [[0,1],[1,1],[1,0],[2,0],[1,2],[2,2]]),
new Hexomino( 30, [[0,0],[0,1],[1,1],[1,2],[2,1],[2,0]]),
new Hexomino( 30, [[0,0],[1,0],[1,1],[2,1],[1,2],[0,2]]),
new Hexomino( 30, [[0,2],[0,1],[1,1],[1,0],[2,1],[2,2]]),
],
[ // #31 = 8
new Hexomino( 31, [[0,2],[1,2],[1,1],[2,1],[3,1],[3,0]]),
new Hexomino( 31, [[0,0],[1,0],[1,1],[1,2],[2,2],[2,3]]),
new Hexomino( 31, [[0,2],[0,1],[1,1],[2,1],[2,0],[3,0]]),
new Hexomino( 31, [[0,0],[0,1],[1,1],[1,2],[1,3],[2,3]]),
new Hexomino( 31, [[0,0],[0,1],[1,1],[2,1],[2,2],[3,2]]),
new Hexomino( 31, [[0,3],[1,3],[1,2],[1,1],[2,1],[2,0]]),
new Hexomino( 31, [[0,0],[1,0],[1,1],[2,1],[3,1],[3,2]]),
new Hexomino( 31, [[0,3],[0,2],[1,2],[1,1],[1,0],[2,0]]),
],
[ // #32 = 4
new Hexomino( 32, [[0,0],[0,1],[1,1],[0,2],[1,2],[2,2]]),
new Hexomino( 32, [[0,2],[1,2],[2,2],[1,1],[2,1],[2,0]]),
new Hexomino( 32, [[0,0],[1,0],[2,0],[0,1],[1,1],[0,2]]),
new Hexomino( 32, [[0,0],[1,0],[2,0],[1,1],[2,1],[2,2]]),
],
[ // #33 = 4
new Hexomino( 33, [[0,2],[0,1],[1,2],[1,1],[1,0],[2,1]]),
new Hexomino( 33, [[0,1],[1,1],[1,2],[1,0],[2,1],[2,2]]),
new Hexomino( 33, [[0,1],[1,1],[2,1],[1,0],[2,0],[1,2]]),
new Hexomino( 33, [[0,0],[0,1],[1,0],[1,1],[2,1],[1,2]]),
],
[ // #34 = 8
new Hexomino( 34, [[0,1],[0,2],[1,2],[1,1],[1,0],[2,0]]),
new Hexomino( 34, [[0,0],[0,1],[1,1],[2,1],[1,2],[2,2]]),
new Hexomino( 34, [[0,2],[1,2],[1,1],[1,0],[2,1],[2,0]]),
new Hexomino( 34, [[0,0],[0,1],[1,0],[1,1],[2,1],[2,2]]),
new Hexomino( 34, [[0,0],[1,0],[1,1],[1,2],[2,1],[2,2]]),
new Hexomino( 34, [[0,2],[0,1],[1,1],[1,0],[2,0],[2,1]]),
new Hexomino( 34, [[0,0],[0,1],[1,0],[1,1],[1,2],[2,2]]),
new Hexomino( 34, [[0,2],[0,1],[1,1],[1,2],[2,1],[2,0]]),
],
[ // #35 = 4
new Hexomino( 35, [[0,2],[1,2],[1,1],[2,1],[2,0],[3,0]]),
new Hexomino( 35, [[0,0],[0,1],[1,1],[1,2],[2,2],[2,3]]),
new Hexomino( 35, [[0,0],[1,0],[1,1],[2,1],[2,2],[3,2]]),
new Hexomino( 35, [[0,3],[0,2],[1,2],[1,1],[2,1],[2,0]]),
]
// [ // #36 = any dulicate cell
// new Hexomino( 36, [[0,1],[1,1],[2,1],[1,0],[2,0],[3,0]]),
// new Hexomino( 36, [[0,0],[0,1],[0,2],[1,1],[1,2],[1,3]]),
// new Hexomino( 36, [[0,0],[1,0],[2,0],[1,1],[2,1],[3,1]]),
// new Hexomino( 36, [[0,1],[0,2],[0,3],[1,0],[1,1],[1,2]])
// ],
];
this.rectangle = [];
this.enumerator = function(row, column, width, height) {
return this.shapes.map(function(a) {
return a.map(function(b) {
return b.move(row, column);
}).filter(function(c) {
return c.squares.every(function(d) {
return d.check(width, height);
});
});
});
};
this.initialize = function(width, height) {
var row, column;
for (row = 0; row < height; row++) {
this.rectangle[row] = [];
for (column = 0; column < width; column++) {
this.rectangle[row][column] =
this.enumerator(row, column, width, height);
}
}
};
}
function State(rectangle, mask, count) {
this.rectangle = rectangle;
this.mask = mask;
this.count = count;
this.shapes = [];
this.index = -1;
this.select = function() {
var row, column;
for (row = 0; row < this.rectangle.length; row++) {
for (column = 0; column < this.rectangle[row].length; column++) {
if (this.rectangle[row][column] === false) {
return new Square(column, row);
}
}
}
return null;
};
this.add = function(rectangle) {
var square, shapes;
square = this.select();
if (square != null) {
shapes = rectangle[square.y][square.x];
this.mask.forEach(function(value, index) {
if (value === false) {
shapes[index].forEach(function(shape) {
this.shapes.push(shape);
}, this);
}
}, this);
}
};
this.next = function() {
this.index = this.index + 1;
return this.index < this.shapes.length;
};
this.fit = function() {
var shape;
shape = this.shapes[this.index];
return shape.squares.every(function(square) {
return this.rectangle[square.y][square.x] === false;
}, this);
};
this.copy = function() {
var rectangle, shape, mask, count;
rectangle = this.rectangle.map(function(row) {
return row.slice();
});
shape = this.shapes[this.index];
shape.squares.forEach(function(square) {
rectangle[square.y][square.x] = true;
});
mask = this.mask.slice();
mask[shape.key] = true;
// Until Count equals to 225 (15 x 15 = 225 cells)
if(shape.key == 0){
count = this.count + 9;
}
else if (shape.key == 21){
count = this.count + 12;
}
else{
count = this.count + 6;
}
return new State(rectangle, mask, count);
};
}
function Puzzle() {
this.stack = [];
this.first = function(width, height) {
var rectangle, row, column, mask;
rectangle = [];
for (row = 0; row < height; row++) {
rectangle[row] = [];
for (column = 0; column < width; column++) {
rectangle[row][column] = false;
}
}
mask = [
false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false,
false, false, false, false, false, false, false,
false, false, false, false, false, false, false,
false, false, false, false, false, false, false
];
return new State(rectangle, mask, 0);
};
this.run = function(width, height) {
var hexo, state, count;
hexo = new Hexominos();
hexo.initialize(width, height);
state = this.first(width, height);
state.add(hexo.rectangle);
this.stack.push(state);
count = width * height;
while (this.stack.length > 0) {
state = this.stack.pop();
if (state.count == count) {
break;
}
while (state.next()) {
if (state.fit()) {
this.stack.push(state);
state = state.copy();
state.add(hexo.rectangle);
this.stack.push(state);
break;
}
}
}
};
}
function paint(puzzle) {
puzzle.stack.forEach(async function(state) {
var shape;
shape = state.shapes[state.index];
fill(colors[shape.key])
shape.squares.forEach(async function(square) {
rect(square.x * 25, square.y * 25, 25, 25);
});
});
}
Мой вопрос заключается в том, как я могу улучшить скорость этого кода и изменить его, чтобы получить решение. Любая помощь будет оценена!