Hai bisogno di aiuto l'iterazione su un array, recuperare due possibilità, senza ripetizioni, per Poker AI

StackOverflow https://stackoverflow.com/questions/2809094

Domanda

Non posso davvero pensare a un buon modo per parola questa domanda, né un titolo buono, e forse la risposta è così ridicolmente semplice che mi manca di esso. Sto lavorando su un poker AI, e voglio calcolare il numero di mani che esistono, che sono migliori delle mie. Ho capito come questo, ma quello che non riesco a capire è il modo migliore per iterare su un gruppo di carte.

Quindi sono al flop, so quali sono le mie due carte sono, e ci sono 3 carte sul tavolo. Quindi, ci sono 47 carte sconosciute e voglio iterare su tutte le possibili combinazioni di tali 47 carte partendo dal presupposto che due sono svenuto, quindi non è possibile avere due carte dello stesso valore e seme, e se si hanno già calcolato un set che si non si vuole farlo di nuovo, perché io di essere perdite di tempo, e questo sarà chiamato molte volte. Se non si capisce vogliono chiedo per favore mi dica e io chiarire di più. Quindi, posso impostare qualcosa di simile, se questo elemento è uguale a uno, significa che non è in mano e non sul bordo, 4 per ogni seme, e 13 per ogni grado. . setOfCards[4][13]

Se faccio un semplice insieme di cicli for in questo modo: (pseudocodice)

//remove cards I know are in play from setOfCards by setting values to zero
for(int i = 0; i < 4; i++)
    for(int j = 0; j < 13; j++)
        for(int k = 0; k < 4; k++)
            for(int l = 0; l < 4; l++)
                //skip if values equal zero
                card1 = setOfCards[i][j]
                card2 = setOfCards[k][l]
                //now compare card1, card2 and set of board cards

Quindi, questo è in realtà sta per ripetere molti valori, ad esempio: card1 = AceOfHearts, card2 = KingOfHearts è lo stesso di card1 = KingOfHearts, card2 = AceOfHearts. Sarà anche alterare i miei calcoli. Come devo fare per evitare questo? Inoltre, c'è un nome per questa tecnica? Grazie.

È stato utile?

Soluzione

sarebbe più facile solo avere un solo array di 52 carte, allora si può dire

for (int i=0; i<52; i++)
    for (int j=i+1; j<52; j++)

Ora j sarà sempre maggiore di i, in modo da ottenere senza ripetizioni. Si potrebbe fare una cosa simile per l'array 2-D, ma è un po 'più complicato:

for (int k=i; ...) 
    for (int l=j+1; ...)

nei due cicli interni dovrebbe farlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top