Почему бы не использовать ориентированное на человека решение и запрограммировать его.
Вам нужно какое-то сопоставление с образцом, но это будет не так сложно. (Кроме того, есть программы, решающие 1000x1000x1000).
Основная идея - работать поэтапно:
- Первый слой
- Второй слой
- Третий слой
Для каждого слоя вы реализуете пару алгоритмов, которые превращают шаблон X в шаблон X '.
Каждый шаг в фазе должен приблизить куб к решению. Вы можете сделать это, добавив значение к каждому шаблону (где более высокие значения задаются для более неразрешенных кубов). Вы также можете добавить сложность (например, количество ходов), чтобы выбрать алгоритм, основанный на получении максимального значения за сложность (или достичь наилучшего результата с наименьшим количеством ходов).
Самое интересное в этом подходе - вы можете добавлять новые алгоритмы, если хотите, и проверять, как часто они используются. Таким образом, вы можете проверить полезность каждого алгоритма.
Если вы действительно хотите заработать эти geekpoints, создайте отдельный язык для описания алгоритмов и паттерна, который они решают.