Comments 22
1) какой SAT солвер вы использовали?
2) сколько времени решало?
Возможно, не до конца понял, но, по-моему, 3 изначальных правила (все клетки нашего игрового поля будут покрыты хотя бы одной фигурой, исключить пересечения фигур, кажная фигура может присутствовать на игровом поле только один раз) избыточны: можно, например, 2 и 3 только оставить. Или 1 и 3.
Нет, недостаточно. Фигура (загогулина) появляется много раз в виде сдвигов, поворотов и отражений. Поэтому, чтобы исключить две или более копии, надо все условия. Иначе, например, можно все поле заполнить фигурой 2х2.
Но ведь этот случай покрывается правилом 3? А правила 1 и 2 становятся эквивалентны друг другу, если удовлетворено 3. Разве нет?
Нет. Первое правило служит для того, чтобы каждая клетка была покрыта хотя бы чем-то (но не гарантирует, что только чем-то одним), второе правило говорит, что то, что покрывает клетки не должно пересекаться (но не гарантирует, что все клетки будут покрыты), и третье правило гарантирует, что в множестве загогулин может существовать только одна загогулина каждого типа (но не гарантирует, что все клетки будут покрыты и что то, чем они покрыты не имеют пересечений).
Хмм… Пожалуй соглашусь. Надо будет попробовать.
Попробовал. Результаты следующие на моем компьютере:
processor: 0
vendor_id: GenuineIntel
cpu family: 6
model: 42
model name: Intel® Core(TM) i7-2600K CPU @ 3.40GHz
Методика, описанная в статье:
real 0m9.585s
user 0m9.548s
sys 0m0.024s
Если убрать ограничение на заполнение каждой клетки (1) — не работает (выдает пустое поле).
Если убрать условие пересечения (2), работает очень долго, не смог дождаться результата.
А так — нарезали простых брусков, потом склеили их в фигурки.
Решение задачи замощения с помощью SAT солвера на примере пентамино