Отправил статью в научный журнал. Шутка.
Бля, я думал, шо это хуяк и всё - какой-то тупорылый пасьянс, а хуй-то там!
Продолжил сегодня
занимацца хуйнёй своё научное эсцледование
Знач я сделал совершенно дегенеративный пасьянс, но там переложить всё-таки надо кое-чо - и на этом у программы возникал затык. Стал трассировать - захерачил 100 000 ходов, оно упало ((
Сделал 50 000 ходов, там прописалось 29200 штоле. Ну, то есть, количество ходов оно у меня не совсем совпадает, ходы это вверх-вниз по дереву решений оно лазит, чо-то отменяет-применяет - в итоге меньше получается.
Вот. И сделал, чтобы оно писало ветку ходов до текущего узла. Потом посмотрел - все строки уникальные, т.е. дерево не циклицца, а просто не может переварить такую туеву хучу вариантов.
У меня сделано как - оно сразу идёт вглубь, если ходов дальше нет, отменяет последний ход, делает другой ход, если он есть, если нет, откатывается ещё выше и таким образом гарантированно обойдёт всё дерево и найдёт решение, если оно есть. Токо я недооценил, шо дерево охуенно большое получается.
читать дальше
Я честно гря пиздел на этих тупорылых красноглазиков, что они в пасьянсе не сделали нормальный анализ ходов и непонятно - раскладывается вообще этот расклад пасьянса или нет. Есть подтверждение, шо в некоторых пасьянсах из Aisleriott они кидают карты как попало и нет никакой гарантии, что его можно разложить. Т.к. бывало так, что там с самого начала токо один доступный ход и пиздец.
Теперь я конечно подзавалил ебало - т.к. это не так-то просто проследить решение, но...
всё равно буду пиздеть!
Потому что да - анализ решения пусть сделать сложно, НО! Можно было сделать хитро - разложить пасьянс как бы задом наперёд - т.е с конца до начала и таким образом гарантированно знать решение!
Так, вернёмся ко мне - есть варианты. Можно строить дерево не вглубь, а вширь. Тогда ты сразу захватишь все возможные ходы, а не будешь ждать, когда оно доберётся до верного хода, если с самого начала был неверный. Но оно будет очень большое, я боялся, что не доберусь до самых глубин, застряну посередине где-то.
Есть варик, как все современные проги делают (как я слышал) комбинированный способ - пройти несколько уровней вширь, потом оценить наиболее перспективные ветви - где с самого начала пиздато карты начали раскладываться и дальше уже разрабатывать их, а остальные ветки послать нахуй.
Есть ещё один вариант, который я и собираюсь попробовать - это ВААПЩЕ всё по-другому сделать. На основе состояний. Создаём знач библиотеку состояний пасьянса - т.е. расположение карт меняется - это новое состояние. Щас мы записываем ходы - если у нас есть 3 карты, которые можно переложить, мы знач их перекладывам в разном порядке, это получается уже 6 веток. Ну и получается, что мы одно и тоже молотим, токо в разном порядке. А так это будут 2 состояния и ещё нескоко промежуточных. Но тогда снимается проблема того, что данный ход уже был и т.д. - если он уже приводит к такому состоянию, что уже было - то нахуй его, продолжаем искать следующие.
В общем, как-то надо в этом направлении подумать - мне кажецца тут чо-то может получицца - я как раз не хотел это делать, т.к. думал что затраты более существенные будут, а вот придётся видимо.
Во, ещё вариант - давать подсказку на первый ход.