|  | 
 
 | 
| 
 | |||||||
| Регистрация | << Правила форума >> | 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  
			
			
			
			
		 | ||||
| 
 | ||||
|   Таблицу соответствия надо бы увидеть. Номинал карт меняется в зависимости от карточной игры. У вас тут A-Туз он старше короля, а вот какие буквы обозначают какую масть я не вижу. | 
| 
			 
			#4  
			
			
			
			
		 | ||||
| 
 | ||||
|   Нельзя для букв использовать сортировку, в картах не алфавитная последовательность, а ведь еще есть цифры от 2 до 10 и их как текст тоже нельзя сортировать. | 
| 
			 
			#5  
			
			
			
			
		 | |||
| 
 | |||
|   порядок карт  AKQJT98765432 Итого 13 и масти c,h,d,s | 
| 
			 
			#6  
			
			
			
			
		 | ||||
| 
 | ||||
|   у TStraingList'a имеется TStringList.CustomSort Method, сортировать можно все, что засунется в TStringList и как пожелается | 
| 
			 
			#7  
			
			
			
			
		 | |||
| 
 | |||
|   Сделал через CustomSort сортировку StringList с номиналами карт через индексоф LC , но как быть с мастями? Разве можно сделать так, чтобы при сортировке листа с номиналами аналогичные действие происходили во втором листе? На ум приходит сделать LC не из 13 карт, а из всех возможных со всеми мастями (52 карты). и И дальше разбить по строкам. Последний раз редактировалось JustProSkill, 25.02.2016 в 20:53. | 
| 
			 
			#8  
			
			
			
			
		 | |||
| 
 | |||
|   Хотите прикол?  В коде определения комбинации я использовал функцию, которая возвращает достоинство карты, простым сравнением, если карта = А, то возвращаем 12 и т.д. Сейчас решил заменить её на ИндексОФ, которая по сути делает тоже самое, в итоге время работы кода увеличилось с 21сек до 30...... Сейчас гляну как сортировка CustomSort влияет на работу. | 
| 
			 
			#9  
			
			
			
			
		 | ||||
| 
 | ||||
|   Бывает. Я тоже не так давно задался вопросом замены текста в строке. Тоже оказалось, что родная функция делает это несколько "медленее", раз так в 100.   | 
| 
			 
			#10  
			
			
			
			
		 | |||
| 
 | |||
|   сортировка через CustomSort(через индексоф) оказалась ещё хуже, подождал минуту и снял процесс. | 
| 
			 
			#11  
			
			
			
			
		 | ||||
| 
 | ||||
|   для чего в CustomSort использовать IndexOf? (если не изменяет память IndexOf рекомендуется использовать на УЖЕ отсортированном списке) в функцию типа TStringListSortCompare передается два индекса и список, задача функции сравнить всего два элемента (их индексы и где они содержатся имеются в функции) и выдать результат их сравнения | 
| 
			 
			#12  
			
			
			
			
		 | |||
| 
 | |||
|   Цитата: 
 Сейчас сделал так: записываю исходную строку в СтрингЛист, сортирую Код:    if(Get_Weight_Hand(List[Index1][1])<Get_Weight_Hand(List[Index2][1]))then
     Result:=1;время работы без по моему алгоритму 22 сек, через сорт стринглист 118 |