Вход | Регистрация


Информационные технологии ::

Метки: 

О решении пасьянса Solitare

Я
   Львенок
 
24.12.03 - 18:30
Моя прога лихо раскидала второй ряд 617 раскладки (причем вроде правильно), выдернула из его верхушки бубнового туза, отправила его в дом, сообщила мне об этом:

BA
-
-
-
PQ
P4
PK
P7
B7 BD CD BK KQ BJ
-
K5 BQ C3 P9 K9 C2 KK
P3 KA B9 K3 C9 B6 C4
P5 B6 P6 P8 K7
K8 C8 B8 C7 C6 K6 C5 K4
B2 PA B3 B4 K2 CJ PD
CA CK KD PJ P2 CQ KJ

(Ряды карт идут с строках (так удобнее печатать). Первые четыре строки - дом, следующие четыре "кэш", следующие 8 - обычные стопки карт, B-Буби, K-Крести, C-Черви, P-Пики, и еще десятка обозначается буквой T, все остальное как положено). После чего она (программа) повисла... ;) Будем искать... ;) (Пишу на Visual C++ .net, но по дурацки, т.к. с .NET знаком слабо)
___
Искренне Ваш, Львенок.
 
  Рекламное место пустует
   fellow
1 - 24.12.03 - 18:34
Возможны ситуации, когда чётное количество ходов будет приводить к той же ситуации, что была на начало этого цикла.
   Львенок
 
2 - 24.12.03 - 20:21
Нет. Новый расклад (сгенерированный из текущего, перемещением карты) не может совпадать ни с одним из предыдущих (т.е. тех, последовательность из которых привела от начального расклада к текущему), это исключает петли. Это условие у меня есть. Повисло почему-то еще...
___
Искренне Ваш, Львенок.
   Львенок
 
3 - 25.12.03 - 11:31
Скажите, я маньяк, если уже переписал почти всю логику и весь вывод на ассемблере? Так красиво все вышло. Быстро, в цвете с мастями. Скоро допишу (чтобы все ж решало пасьянс и не висло) и выложу. Мож сеня. Кому-то интересно, если я напишу небольшой урок программирования на асме на примере этой проги?
___
Искренне ваш, Львенок.
___
   gr13
 
4 - 25.12.03 - 11:32
(3)мне вспомнить молодость в училище хочу
   ally
 
5 - 25.12.03 - 11:34
я тоже хочу
   kril
6 - 25.12.03 - 11:45
(3) Это было бы очень любезно с вашей стороны.
   fellow
7 - 25.12.03 - 11:46
О, да!
   valich
 
8 - 25.12.03 - 15:19
Львенок, а прога будет показывать метод, каким разложила?
   Львенок
 
9 - 25.12.03 - 15:39
По крайней мере вся история перестановок карт сохраняется, а значит, ее можно показать.
___
Искренне Ваш, Львенок.
   Мистика
10 - 26.12.03 - 10:18
кто разложит(без набора комбинации 3-х клавиш) "-1" или "-2" расклад тому 1 000 000 $
:-)
 
  Рекламное место пустует
   Львенок
 
11 - 26.12.03 - 10:48
(10) А вот тут ты можешь попасть на деньги. Нет, мне конечно известно, что -1 и -2 не раскладываются, НО!.. Думаешь нельзя придумать ничего кроме набора из Ctrl+Shift+F10? А исправления в коде Solitare.exe? Не много ли миллион баксов за обычный патчер?
___
Искренне Ваш, Львенок.
   Мистика
12 - 26.12.03 - 11:11
все расклады которые предлагает сама программа я раскладывал, небыло не разложенных(если хорошо постараться).
   Львенок
 
13 - 26.12.03 - 16:46
Наивный я албанец. Думал решу. Напишу программу... Ага. Написал. Если решение само просится - раскладывает. Если нет, или задумывается без видимых результатов (это-то на асме на 2900 селероне), или вылетает со stack overflow'ом (это происходит при уровне рекурсии порядка 500). Каким образом он в такую глубокую рекурсию уходит вообще не вполне ясно. Но прогу, наверное, сейчас выложу.
P.S.: Конкретно на 617-м задумывается до бесконечности
   fellow
14 - 26.12.03 - 16:50
Прежде программы выложите ход Ваших рассуждений при построении модели решателя игровых ситуаций.
   Львенок
 
15 - 26.12.03 - 17:02
Тривиально. Есть текущий расклад - линейный массив из 68 байт (52 карты + 16 маркеров конца стопки). Но это не принципиально. Первые четыре стопки, это "Дом" (куда нужно переложить все карты), следующие четыре это "Кэш" (куда можно временно класть не более одной карты), остальные 8 обычные стопки карт, в которых в начале и находятся все карты. Пустая стопка состоит только из маркера конца стопки - 0. Таким образом в начале любой расклад имеет вид:
0, 0, 0, 0 //(дом)
0, 0, 0, 0 //(кэш),

к1, к2, ..., к7, 0 //Первая стопка
...
к1, к2, ..., к7, 0 //Четвертая стопка
к1, ..., к6, 0 //Пятая стопка
...
к1, ..., к6, 0 //Восьмая стопка

Итого длина расклада не зависит от самого расклада. Пока все правильно?
   skunk
 
16 - 26.12.03 - 17:06
а карты как различаются
   fellow
17 - 26.12.03 - 17:33
(15)
Попытка сформулировать модель игры (простите, но у меня ВЕЧЕР ПЬЯТНИЦЫ):

а) Имеется 52 карты четырёх мастей, две масти красные, две масти чёрные.
б) Имеется игровое поле, состоящее из восьми слотов для раскладывания карт. Имеется кэш на четыре карты. Имеется четыре дома для карт каждой масти.
в) Цель игры состоит в упорядоченном заполнении каждого дома картами соответствующей масти, начиная с туза и заканчивая двойкой.
г) Начальное состояние игры - все 52 карты разложены в слотах в произвольном порядке.
д) Процесс игры состоит в последовательной смене расклада, каждый акт смены расклада назовём ходом.
е) Допускается только такой ход, в процессе которого карта меньшего достоинства определённого цвета укладывается на карту на единицу большего достоинства другого цвета, или карта помещается в кэш, или карта помещается в дом, или карта помещается в свободный слот.
ж) Карта помещается в кэш втом случае, если в нём имеется свободное место.
з) Карта помещается в дом в том случае, если в доме находится карта той же масти на единицу большего достоинства.
и) Максимальное количество перемещаемых карт за один ход на единицу больше, чем имеется свободных мест в слотах и кэше.
к) Раскладом назовём совокупность карт в слотах игрового поля.
л) В результате очередного хода может возникнуть расклад, имевший место на одном из предыдущих ходов. Такая ситуация называется зацикливание.
м) При возникновении зацикливания происходит откат ходов до расклада, предшествующего первому появлению зацикленного расклада, при этом все откаченные хода и расклады запоминаются как недопустимые.
н) Если очередной ход становится невозможным, происходит откат на один ход, при этом расклад, вызвавший невозможный хода, запоминается как недопустимый.
Примерно так я начал рассуждать. Обратите внимание, на рекурсию я не полагаюсь, предпочитая добрый старый цикл с ветвлениями.
   Львенок
 
18 - 27.12.03 - 00:37
Далее карты. Одна карта - байт. Два старший бита масть, причем бит 6-цвет (0-Красный, 1-Черный). Т.е.

Cv equ 0 ; Черви
Kr equ 64; Крести
Bb equ 128; Буби
Pk equ 192; Пики

Младшие 4 бита сама карта - 1 - туз, 2-2, 10-10,11-валет, 12-дама, 13-Король. Остальные варианты и биты не используются. байт 0 - маркер конца стопки.
Причем, если перед началом первого расклада находится 0 (а если существует стек в котором последовательно сохраняются расклады впритык друг к другу, все остается в силе), то справедливо следующее: Последняя карта каждой стопки, это карта находящяяся перед 0. Если последняя карта стопки сама является 0 (маркером конца предыдущей стопки), то стопка пустая. Поскольку любой расклад заканчивается на 0, то если первая стопка следующего расклада в сткеке пуста, то ее последняя карта все равно 0. Если последние 12 стопок пусты (т.е. заполнены первые 4), то пасьянс полностью решен.
___
Искренне Ваш, Львенок.
   fellow
19 - 27.12.03 - 06:43
Касаясь технических подробностей определения карт, обозначение масти и цвета двумя битами - безусловно логичное решение. Но я бы предложил несколько иные обозначения:
а) туз - самая старшая карта, на неё кладутся все остальные в доме, т.е. 14.
б) "не карта", или placeholder, маркер пустого места - это вообще самое большое число, т.е. 15, вдобавок на неё можно положить любую масть, т.о. метка масти расширяестся до трёх бит:  000 - placeholder, 001- червы, 011 - крести, 101 - бубны (не буби, хе-хе), 111 - пики.
Что это даёт в совокупности? Единообразие при принятии решения - карту можно положить поверх любой старшей противоположного цвета или "нецвета".
   оге
20 - 15.01.04 - 19:45
что это
   valich
 
21 - 16.01.04 - 13:19
Люди, нехорошо на вопросы не отвечать...
Это в Windows такая игра есть - Solitare...  Так в нем есть расклад № 617, который упорно не хочет раскладываться... Были сообщения о его "разложении", но документально никто не подтвердил... А это была попытка написать программку для разбора раскладов... По всей видимости пока не завершенная...
   begemot
22 - 25.01.04 - 09:52
Скажите,кто-нибудь раскладывал 1941 расклад в Solitare?



Список тем форума
Рекламное место пустует  
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует