Начало тут:
https://rsdn.org/forum/etude/9018754.flatАвтор: Shmj
Дата: 15.11 12:34
В общем то классическая мельница 3*3, но с условием запрета обратного хода (т.е. походив фишкой, потом не можешь отменить/пойти взад этой последней фишкой).
Интересно что если нет этого условия — список состояний (и разрешенных ходов из данного состояния) в простом массиве занимает около 180 Кб. — что норм. Т.е. даже об этом не думал, чтобы как-то сжимать.
А вот если добавить правило запрета обратного хода — то чтобы правильно походило (с учетом запретов себя и противника) — полный список всех состояний и данных куда можно ходить — уже занимает
15.9 MB, что проблема. Т.е. уже загружать — быстро не откроется...
Что можно сделать. Очевидное — это симметрия. Левая и правая клеточка равнозначны. А вот верх и низ — уже нет, т.к. там зависит от игрока.
Т.е. за счет симметричности левого и правого — можно ужать в 2 раза.
Далее, я пишут в таком виде:
{
red: [A1, A2, A3],
black: [B1, B2, B3],
redForbidden: null,
blackForbidden: null,
transitions: [
[B1, C1],
[B2, C1],
[B2, C2],
[B2, C3],
[B3, C3],
],
}
т.е. текущее состояние и transitions — разрешенные переходы.
Но состояний то вроде не много, менее 16 тыс., значит влезет в 2 байта. Первые 4 поля значит — 8 байт с лихвой. Ну и преходы.
Еще вариант вычислять на лету, но будет нагружать слабые телефоны.