Началось всё ещё очень давно. Когда мне было примерно 6 лет, мама подарила мне Кубик Рубика.
читать дальшеЯ его достал, повернул одну грань, потом повернул её обратно. Получилось, я его как бы "собрал". Молодец, сказала мама, а теперь попробуй вот так! Взяла у меня из рук кубик и раз-раз-раз покрутила все грани во всех направлениях. Минуту наверное крутила. На вот, говорит, собирай! Конечно, собрать я его не смог. И разревелся. Токо что у меня был целый кубик, а теперь хуйня какая-то. Мама тоже не смогла собрать. С какой головой тогда надо было его крутить? Таким образом, я получил тяжёлую психологическую (или психическую) трамву. Кстати, от трамвах - в то время я думал, что они происходят от слова "трамвай". Он тяжёлый, железный... как ёбнет и буит трамва! ![:gigi:](http://static.diary.ru/picture/1134.gif)
Какой из этого можно сделать вывод? Ну, с этими ебучими детьми ваще не угадаешь, как себя вести. Меньше трогаешь - меньше ревёт. Хотя, и это не факт.
Короче, позднее я научился собирать один цвет. Потом допёр, что можно его собрать абы как, а можно "правильно". В этом случае верхняя треть каждой прилегающей грани тоже собирается. (Собранный цвет при этом наверху). Ещё позже, году в 2001м методом тыка научился собирать ещё и средний "пояс", таким образом собранным оказывался верхний цвет и 2/3 каждой прилегающей грани. На этом всё. Каждый раз я на многие годы забывал о своих экспериментах, т.к. находились дела поважнее, но каждый раз неизменно к ним возвращался. В 2001м же году я впервые использовал для этой цели компьютер - написал программу-имитатор кубика на С. Я думал, что если собран верхний цвет и 1/3 каждой грани, надо только в правильной последовательности повтыкать на места 4 двухцветных элемента для сбора второй трети каждой грани, а уж всё остальное соберётся само. Крутить всё это вручную было сложно, а на компе самое оно. Для этого и нужна была собственная программа. Сохранился в нужном месте и крутишь. Потом загрузился и опять. Я проверил все имеющиеся последовательности - их было 16, а может и больше, и само ничего не собралось ((( Тогда я начал подозревать, что последовательной сборкой "по частям" - т.е. сначала один цвет, потом потихоньку остальные - дело не решишь. Весь кубик нужно сразу собирать целиком. И на этом обломался.
Я конечно мог бы подсмотреть готовый алгоритм сборки ебучего кубика и закрыть вопрос. Но как-то не знаю, хочется уже самому догадаться. Не догадаюсь, небо не упадёт, хрен с ним.
Периодически к этому вопросу я возвращался, особенно в те моменты, когда лажал на всех фронтах, и пришёл к выводу, что надо написать программу перебора вариантов. Но пока так и не написал. Каждый раз, когда я собирался её написать, то думал, что надо как-то это сделать на С++. То есть, с применением ООП. А в ООП я не особо, и на этом дело обычно стопорилось. Вместе с тем, похожую структуру имеют программы для, например, шашек, шахмат, игры "уголки", гомоку и похожих.
Мы имеем некий объект, у которого есть конечное, но очень большое число возможных состояний, которые переходят одно в другое по определённым правилам. И надо перевести из некоторого начального состояния в конечное за некоторое число ходов.
Кроме этого объекта мы имеем "дерево решений" - граф, который отображает все эти состояния и связи между ними.
И последним штрихом к этому будет некая "функция оценки". Если это полное дерево решений, она будет лазить по дереву до самого конца, определять, чем заканчивается каждый ход и выбирать оптимальный. Выиграть у такой программы будет невозможно. Максимум, сыграть вничью. Если это только часть дерева (эти ебучие деревья отъедают до хрена памяти), то функция оценки будет вынуждена оценивать ходы только на имеющейся информации.
Я уже прочитал некие обзорные статьи по этому делу в тырнете. Узнал, что кубик Рубик решён с помощью математической теории групп. Узнал, что такое "алгоритм Бога" - алгоритм сборки за наименьшее число ходов и "число Бога" - число этих ходов. Алгоритм сборки кубика я пока ещё не изучал, потому что боюсь, вдруг, если не сам допру, то гештальт не закроется. Хотя, конечно, херня всё это. А мож я никогда и не допру?Программу тоже пока не написал. В принципе, неважно, что именно запихивать в программу - кубик ли, шашки, уголки. Главное, реализовать это ебучее дерево перебора и попробовать с ним поработать.
Чтобы сказать потом "познал я небо, его измерил" (с) ![:gigi:](http://static.diary.ru/picture/1134.gif)
И значит, я несколько раз готов был практически сесть и всё написать, но как-то вот пока ничего. А было б мне лет 16, думаю, прога была бы уже готова. Но мы пока храним надежду!