Penso che si dovrebbe fare le 21 combinazioni e utilizzare una sorta di 7462 tavolo. 1 °: qualsiasi 7 carte hanno 21 combinazioni di 5 carte diverse 2 °: ogni possibile mano di poker finale (2.598.960) rappresenta uno dei 7462 diversi tipi di mani quindi, è facile.
Devi solo guardare ogni 21 combinazioni delle tue carte e, per ognuna, vedere la classifica della tabella di classifica 7462. http://www.sendspace.com/file/pet0dd
Quindi, per ogni 7 carte si avranno 21 diverse classifiche da questo tavolo 7462 creato. La classifica più alta di 21 combinazioni è quella che vuoi sapere.
Per capire la tabella: In ogni riga hai la mano di 5 carte (Z per suited, Y non adatto) e ne hai la classifica. Questo è solo il tuo bisogno. Ti do la tabella e un algoritmo di esempio. Non è davvero il codice.È il formato di base visivo e l'ho scritto ora. probabilmente non funziona, ma dovresti capire. Il codice dovrebbe essere qualcosa del tipo:
'############### 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
La classifica finale è variabile myranking. Dovresti conoscere la tua mano in meno di un secondo. Ed è anche buono da confrontare con le altre mani, perché hai il valore di classifica e non il nome di esso. E se vuoi fare qualcosa con gli algoritmi del poker, è qui che dovresti iniziare. Con i valori di classifica tutto è semplice e veloce.
Nota: non sono un programmatore. Io voglio essere. Comprendo alcune funzioni di base visive. Sapevo come fare programmi reali. Se l'algoritmo funziona, si prega di lasciare un commento. Se vuoi che sia molto veloce, non so come farlo. Desidero avere un algoritmo ultra veloce che mi permette di controllare (in tempo reale) le mie probabilità contro qualsiasi avversario in ogni fase del gioco. Ho provato molti algoritmi per calcolare le mie probabilità al flop in tempo reale ma il più veloce che posso è di 30 secondi. Ora, posso calcolare le mie probabilità al flop in 3 secondi ma uso un database da 150 gigabyte con molte cose precalcolate. Se vuoi conoscere le tue quote in tempo reale, dovresti avere molte cose precalcolate. Ecco come ho fatto.
Bella domanda, ma penso che è meglio solo controllando le 21 combinazioni invece di cercare di capire un po 'espediente pazzo a scelta rapida. –
@David In realtà, nulla potrebbe essere più lontano dalla verità. Le persone hanno fatto un sacco di sforzi per scrivere velocemente 7 valutatori di carte. Quando vuoi fare milioni di mani al secondo, la velocità diventa importante. –
@David: Ci sono modi migliori che sono più facili da leggere e richiedono NESSUN ordinamento. Sono anche diversi ordini di grandezza più veloci per questo. Un esempio è - ahem - trovato qui: http://code.google.com/p/specialkpokereval/. – SK9