|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Сортировка карт по убыванию достоинства карт
Обнаружил у себя в коде, что на сортировку строки карт уходит в 2 раза больше времени чем на определение комбинации, что очень плохо (я много раз оптимизировал этот алгоритм, и думал он идеален, там 5-6 строчек кода, оказалось нет, и идей больше нет).
Есть строка с картами и мастями: 'AhKhQhJh2hAsKs', её необходимо отсортировать по убыванию достоинства карт и разбить на 2 строки Unsuited и Suited (номинал и масти: т.е. получается AAKKQJ2 и hshshhh). Как делаю я: я у меня есть StringList LC с картами от А до 2(13 строк), я начинаю прогонять по каждой карте начиная от А, пока входная строка (назовём её Hand, а функцию SortHand) не закончится. Допустим берём первый проход с А, далее идёт цикл while(AnsiPos(LC[i],hand)>0) do (пока во входной строке есть текущая карта А, добавляем ей к строке Unsuited, и её масть к Suited, после удаляем из строки карту которую нашли). Как по мне алгоритм идеален и лучше не сделать, но кто знает может у кого то будут идеи лучше. |
#2
|
|||
|
|||
Можно сортировку возложить на TStringList (свойство Sorted = true), а заполнять его по отдельным картам: 'Ah', 'Kh'...
|
#3
|
||||
|
||||
Нельзя для букв использовать сортировку, в картах не алфавитная последовательность, а ведь еще есть цифры от 2 до 10 и их как текст тоже нельзя сортировать.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#4
|
|||
|
|||
порядок карт
AKQJT98765432 Итого 13 и масти c,h,d,s |
#5
|
||||
|
||||
у TStraingList'a имеется TStringList.CustomSort Method, сортировать можно все, что засунется в TStringList и как пожелается
Понять, что хочет заказчик - бесценно, ведь он платит MasterCard |
#6
|
|||
|
|||
Сделал через CustomSort сортировку StringList с номиналами карт через индексоф LC , но как быть с мастями?
Разве можно сделать так, чтобы при сортировке листа с номиналами аналогичные действие происходили во втором листе? На ум приходит сделать LC не из 13 карт, а из всех возможных со всеми мастями (52 карты). и И дальше разбить по строкам. Последний раз редактировалось JustProSkill, 25.02.2016 в 20:53. |
#7
|
||||
|
||||
Таблицу соответствия надо бы увидеть. Номинал карт меняется в зависимости от карточной игры. У вас тут A-Туз он старше короля, а вот какие буквы обозначают какую масть я не вижу.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |