Я думаю, вы должны составить 21 комбинацию и использовать какую-то таблицу 7462.
1-й: любые 7 карт имеют 21 комбинацию из 5 карт
2-й: каждая возможная последняя покерная комбинация (2.598.960) представляет собой одну из 7462 разного рода рук
так что это просто.
Вам просто нужно взглянуть на каждые 21 комбинацию ваших карт и посмотреть каждую из них в таблице рейтинга 7462. http://www.sendspace.com/file/pet0dd
Тогда для каждых 7 карт у вас будет 21 рейтинг из этой таблицы 7462, которую я составил. Самый высокий рейтинг из 21 комбинации - это та, которую вы хотите знать.
Чтобы понять таблицу: в каждой строке у вас есть 5-карточная рука (Z для масти, Y для не масти), и у вас есть ее рейтинг. Это только вам нужно. Я даю вам таблицу и пример алгоритма. Это не совсем код. Это визуальный базовый формат, и я написал его сейчас. вероятно, не работает, но вы должны понимать. Код будет примерно таким:
'############### 1st: Define your hand, for example "2c2d2h2s3c3h3s" #############################################################################################
Dim mycard As New ArrayList
mycard(1).Add("2c")
mycard(2).Add("2d")
mycard(3).Add("2h")
mycard(4).Add("2s")
mycard(5).Add("3c")
mycard(6).Add("3h")
mycard(7).Add("3s")
mycard.Sort() '################# you need to sort in alphabeticall order to match it later with 7462 table #############################################
' ################## 2nd: Let´s transform it to every kind of 5 cards combinations (21). It will also preserve the alphabeticall order ##################################
Dim myHand5 As String = ""
Dim suited as String = ""
Dim ranking as Integer = 0
Dim myranking as Integer = 7462
Dim mystring as String = ""
For cicle1 = 0 to 2
For cicle2 = cicle1 + 1 to 3
For cicle3 = cicle3 + 1 to 4
For cicle4 = cicle3 + 1 to 5
For cicle5 = cicle4 + 1 to 6
myhand5 = left(mycard(cicle1),1) & left(mycard(cicle2),1) & left(mycard(cicle3),1) & left(mycard(cicle4),1) & left(mycard(cicle5),1)
suited = left(mycard(cicle1),2) & left(mycard(cicle2),2) & left(mycard(cicle3),2) & left(mycard(cicle4),2) & left(mycard(cicle5),2)
if suited = "ccccc" or suited = "ddddd" or suited = "hhhhh" or suited = "sssss" then myhand5 = myhand5 & "Z" Else myhand5 = myhand5 & "Y"
ranking = 0
FileOpen (1, "7462.txt", Input)
Do
ranking = ranking + 1
Input(1, mystring)
Input(1, ranking)
If mystring = myhand5 Then
If ranking < myranking then myrankin = ranking
End If
Loop Until EOF(1)
FileClose(1)
Next cicle5
Next cicle4
Next cicle3
Next cicle2
Next cicle1
Окончательный рейтинг - переменная myranking. Вы должны знать свою руку менее чем за секунду. А также это хорошо для сравнения с другими руками, потому что у вас есть значение рейтинга, а не его название. И если вы хотите что-то сделать с помощью покерных алгоритмов, это то, с чего вам следует начать. Со значениями рейтинга все быстро и просто.
Примечание: я не программист. Я хочу быть. Я понимаю некоторые визуальные основные функции. Я хотел знать, как создавать настоящие программы. Если алгоритм работает, пожалуйста, оставьте комментарий. Если вы хотите, чтобы это было очень-очень быстро, я не знаю, как это сделать. Я хочу сказать, что у меня есть сверхбыстрый алгоритм, который позволяет мне проверять (в режиме реального времени) свои шансы против любых оппонентов на каждом этапе игры. Я перепробовал много алгоритмов, чтобы рассчитать свои шансы на флопе в режиме реального времени, но самый быстрый, который я могу, это 30 секунд. Теперь я могу рассчитать свои шансы на флопе за 3 секунды, но я использую базу данных на 150 гигабайт со многими предварительно рассчитанными вещами. Если вы хотите узнать свои шансы в режиме реального времени, вы должны рассчитать многие вещи заранее. Вот как я это сделал.