Pagina 1 di 2

[Qualsiasi ling.] Stampare tutte le combinazioni con 6 carte

MessaggioInviato: 24/04/2019, 08:53
da TommyB1992
Qualsiasi linguaggio eccetto quelli funzionali, quelli che si possono eseguire solo su windows e a pagamento (come matlab) altrimenti non posso testare il codice. Grazie!!!

Ipotizzando di avere 6 carte nel mazzo: A♠ K♠ Q♠ A♣ K♣ Q♣

E tenendo conto che:
A♠ K♠ Q♠ equivale a A♣ K♣ Q♣
o
A♠ K♠ Q♣ equivale a A♣ K♣ Q♠
perchè la probabilità che escano sono uguali.

Conseguentemente, ora proviamo ad eliminare i semi e invetarcene 2 nuovi, "z" e "y": il primo seme è delle parima carta che viene estratta è la "z", il secondo seme è della seconda carta che viene estratta, se la carta è uguale alla precedente è la "y", se la carta è differente può essere sia la "z" che la "y".

EDIT: mi sono scordato di dire che le carte le dovrei ordinare dalla più alta alla più bassa. E i semi dovrebbero essere ordinati secondo "z" > "y", quindi esempi validi sono:
1) Az Ay Kz
2) Az Kz Qz
Esempi non validi sono:
1) Ay Az Kz
2) Az Ay Ky
3) Ay Ky Qy

Le combo che possiamo formare con questa interpretazione sono (estraendo 3 carte dal mazzo):
1) Az Ay Kz (che potrebbe equivalere a Az Ay Ky)
2) Az Ay Qz (che potrebbe equivalere a Az Ay Qy)
3) Az Kz Ky
4) Kz Ky Qy
5) Az Qz Qy
6) Kz Qz Qy
7) Az Kz Qz
8 ) Az Kz Qy
9) Az Ky Qz
10) Az Ky Qy

Ovviamente anche consigli teorici sono ben accetti. Attualmente cerco di controllare che semi estrarre controllando quali carte sono state inserite.

Ma forse creare prima un deck ordinato e rimuovere dal deck potrebbe essere una soluzione migliore.

EDIT 2: pensando potrei anche farle letteralmente tutte e poi creare una funzione che effettua il pruning... cosa ne pensate?

Re: [Qualsiasi ling.] Stampare tutte le combinazioni con 6 carte

MessaggioInviato: 24/04/2019, 14:44
da vict85
Il problema dell'inversione del colore non lo vedo un gran problema perché ti basta richiedere che la carta più alta sia sempre di un determinato segno. Comunque stampare tutte le combinazioni ordinate non è diverso da stampare qualcosa come:
123
124
125
134
135
145
234
235
245
345
(l'esempio è con 5 carte)

Re: [Qualsiasi ling.] Stampare tutte le combinazioni con 6 carte

MessaggioInviato: 24/04/2019, 15:40
da TommyB1992
vict85 ha scritto:Il problema dell'inversione del colore non lo vedo un gran problema perché ti basta richiedere che la carta più alta sia sempre di un determinato segno.


Sicuro di ciò che affermi?

Potresti spiegarmi come funziona con due combo differenti come:
Az Ky Qz
e
Az Kz Qz

Dove ovviamente ci servono tutte e due.

Grazie mille della risposta

Re: [Qualsiasi ling.] Stampare tutte le combinazioni con 6 carte

MessaggioInviato: 24/04/2019, 17:33
da vict85
Non ho capito la tua domanda. Fissando il segno della carta più grande puoi avere Az Ky Qz ma non Ay Kz Qy.

Re: [Qualsiasi ling.] Stampare tutte le combinazioni con 6 carte

MessaggioInviato: 25/04/2019, 05:52
da TommyB1992
vict85 ha scritto:Non ho capito la tua domanda. Fissando il segno della carta più grande puoi avere Az Ky Qz ma non Ay Kz Qy.


Appunto.
A me non serve SEMPRE il seme più alto.

Dipende dalla configurazione.

Az Ky Qz che equivarebbe a un A♠ K♠ Q♠ oppure a A♣ K♣ Q♣
e mi serve anche
Az Ay Kz che equivarebbe a A♠ A♣ K♠ oppure a A♣ A♠ K♣

Spero di essere stato più chiaro, altrimenti provo anche a descrivere perchè lo voglia fare così magari sarà possibile entrare meglio nella logica dell'algoritmo.

==========================
EDIT: attualmente sto risolvendo generando tutte le combo, e poi scrivendo vari algoritmi di pruning che eliminano le combo con probabilità di uscire statisticamente uguali.
Però sono sempre ben disposto ad ascoltare consigli.

Re: [Qualsiasi ling.] Stampare tutte le combinazioni con 6 carte

MessaggioInviato: 25/04/2019, 10:01
da vict85
Ok, quindi stavi già "fissando" il primo seme della lista. In questo caso non capisco allora che altre combo tu debba filtrare.

Per esempio supponi di avere
Codice:
const char carte[6][3] = { "Az", "Ay", "Kz", "Ky", "Qz", "Qy" };
allora l'ordine della carte è dato dall'indice nell'array e devi generare tutte le combinazioni ordinate di 3 carte la cui prima carta ha indice \(0\), \(2\) e \(4\). Tra cicli for dovrebbero risolvere il problema in modo abbastanza semplice
Codice:
#include <iostream>

int main( void )
{
    const char carte[6][3] = { "Az", "Ay", "Kz", "Ky", "Qz", "Qy" };

    for( int i =0; i < 6; i += 2 )
    {
        for( int j=i+1; j < 6; j++ )
        {
            for( int k=j+1; k < 6; k++ )
            {
                std::cout << carte[i] << " " << carte[j] << " " << carte[k] << std::endl;
            }
        }
    }
}

Re: [Qualsiasi ling.] Stampare tutte le combinazioni con 6 carte

MessaggioInviato: 25/04/2019, 11:29
da fmnq
TommyB1992 ha scritto:Qualsiasi linguaggio eccetto quelli funzionali

Ma cos

Re: [Qualsiasi ling.] Stampare tutte le combinazioni con 6 carte

MessaggioInviato: 25/04/2019, 12:32
da TommyB1992
vict85 ha scritto:...


Il tuo source code ritorna:
Az Ay Kz
Az Ay Ky
Az Ay Qz
Az Ay Qy
Az Kz Ky
Az Kz Qz
Az Kz Qy
Az Ky Qz
Az Ky Qy
Az Qz Qy
Kz Ky Qz
Kz Ky Qy
Kz Qz Qy

Che non va bene, perchè per esempio:
Az Ay Kz
Az Ay Ky

Sono la stessa configurazione (ergo sono la stessa cosa, due assi e un K che ha lo stesso seme di uno dei due assi) con la stessa probabilità statistica di venire estratta. A me serve solo la prima.

Per essere correto il tuo codice dovrebbe ritornare:
Az Ay Kz
Az Ay Ky
Az Ay Qz
Az Ay Qy
Az Kz Ky
Az Kz Qz
Az Kz Qy
Az Ky Qz
Az Ky Qy
Az Qz Qy
Kz Ky Qz
Kz Ky Qy
Kz Qz Qy

Re: [Qualsiasi ling.] Stampare tutte le combinazioni con 6 carte

MessaggioInviato: 25/04/2019, 12:53
da vict85
Non avevo notato questa possibilità. Ma non è difficile adattare il codice per quella trasformazione.
Codice:
#include <iostream>

int main( void )
{
    const char carte[6][3] = { "Az", "Ay", "Kz", "Ky", "Qz", "Qy" };

    for( int i =0; i < 4; i += 2 )
    {
        for( int k = i+2; k < 5; k+=2 )
        {
            std::cout << carte[i] << " " << carte[i+1] << " " << carte[k] << std::endl;
        }
        for( int j=i+2; j < 5; j++ )
        {
            for( int k=j+1; k < 6; k++ )
            {
                std::cout << carte[i] << " " << carte[j] << " " << carte[k] << std::endl;
            }
        }
    }
}

Re: [Qualsiasi ling.] Stampare tutte le combinazioni con 6 carte

MessaggioInviato: 25/04/2019, 13:05
da TommyB1992
Ok per 3 carte, ma se fossero 9 carte estratte e usando tutto il mazzo di 52 carte?

Pensi che riadattato funzionerebbe comunque?