Passa al tema normale
Discussioni su argomenti di Informatica

Regole del forum

Consulta il nostro regolamento e la guida per scrivere le formule
Rispondi al messaggio

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

25/04/2019, 14:16

No, la complessità cresce notevolmente (oltre che il numero di soluzioni). E fare 9 for annidati è impensabile.

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

25/04/2019, 14:24

Appunto, a me serviva qualcosa, magari di funzionale (anche se paradossalmente ho chiesto di non portarmi esempi con linguaggi funzionali).

Quindi tornando alle basi, la mia attuale soluzione è: generarle tutte e poi con un algoritmo tagliare quelle che non sono conformi alle mie necessità.

Che ne pensi?

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

25/04/2019, 14:27

Ma perché vuoi escludere non tanto un linguaggio (che ci sta, puoi dire "non lo conosco e non lo saprei tweakare") ma un intero paradigma?

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

25/04/2019, 14:30

Non mi sono spiegato bene, a me l'esempio funzionale va bene (e anche il codice funzionale).

E' il linguaggio funzionale che non voglio.
Questo perchè non sono in grado di utilizzarli (oltre a non capire la sinstassi) a differenza dei linguaggi di scripting/programmazione dove in genere basta installare il software ed eseguire lo script, oppure compilarlo.

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

25/04/2019, 14:59

Continuo a non capire; ti va bene un algoritmo funzionale in un linguaggio che conosci, ma non in uno che non conosci? E allora quale conosci?

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

25/04/2019, 15:16

fmnq ha scritto:Continuo a non capire; ti va bene un algoritmo funzionale in un linguaggio che conosci, ma non in uno che non conosci? E allora quale conosci?


Esatto, ma anche se non lo conosco un linguaggio procedurale o ad oggetti lo capisco.

Un linguaggio funzionale, come haskell:
Codice:
  do let cycle1 = cycle [1,2,3,4] :: [Int]
     let (use_now, save_for_later) = splitAt 5 cycle1
     putStrLn $ "I am totally using some values: " ++ show use_now
     let (use_more, save_more_for_later) = splitAt 5 save_for_later
     putStrLn $ "See, I can get some more: " ++ show use_more


o il LISP:
Codice:
(defun demo-function (flag)
   (print 'entering-outer-block)
   
   (block outer-block
      (print 'entering-inner-block)
      (print (block inner-block

         (if flag
            (return-from outer-block 3)
            (return-from inner-block 5)
         )

         (print 'This-wil--not-be-printed))
      )

      (print 'left-inner-block)
      (print 'leaving-outer-block)
   t)
)
(demo-function t)
(terpri)
(demo-function nil)


Non saprei dove mettere le mani.

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

25/04/2019, 16:44

TommyB1992 ha scritto:Ok per 3 carte, ma se fossero 9 carte estratte e usando tutto il mazzo di 52 carte?

Scusa ma non sono sicuro di aver capito bene ciò che stai cercando di fare.
Ragioniamo direttamente sul caso generale del mazzo completo di 52 carte e 4 semi. La generica sequenza di 9 carte quali caratteristiche deve avere affinché valga come un'unica "combinazione"?

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

26/04/2019, 15:51

Super Squirrel ha scritto:
TommyB1992 ha scritto:Ok per 3 carte, ma se fossero 9 carte estratte e usando tutto il mazzo di 52 carte?

Scusa ma non sono sicuro di aver capito bene ciò che stai cercando di fare.
Ragioniamo direttamente sul caso generale del mazzo completo di 52 carte e 4 semi. La generica sequenza di 9 carte quali caratteristiche deve avere affinché valga come un'unica "combinazione"?


Guarda onestamente non so se mi servirà mai con 9 carte, però l'algoritmo "non dovrebbe" avere limitazioni (ergo metti il numero di carte come parametro e lui restituisce le combo), sono comunque sicuro che fino a 5 carte c'arrivo senza molti problemi.

Però provo comunque a farti un paio di esempi (scusa se li faccio da 5 carte ma, da 9 potrei finire domani, nota quante combo sono solo per una carta con un seme differente):

1) Az Kz Qz Jz Tz corrisponde a:

A♠ K♠ Q♠ J♠ T♠
A♣ K♣ Q♣ J♣ T♣
A♦ K♦ Q♦ J♦ T♦
A♥ K♥ Q♥ J♥ T♥



2) Az Kz Qz Jz Ty corrisponde a:

A♠ K♠ Q♠ J♠ T♣
A♠ K♠ Q♠ J♠ T♦
A♠ K♠ Q♠ J♠ T♥
A♣ K♣ Q♣ J♣ T♠
A♣ K♣ Q♣ J♣ T♦
A♣ K♣ Q♣ J♣ T♥
A♦ K♦ Q♦ J♦ T♠
A♦ K♦ Q♦ J♦ T♣
A♦ K♦ Q♦ J♦ T♥
A♥ K♥ Q♥ J♥ T♠
A♥ K♥ Q♥ J♥ T♣
A♥ K♥ Q♥ J♥ T♦

Come è possibile notare in questo modo, con una combinazione ne abbiamo coperte ben 12.

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

26/04/2019, 17:48

Dal punto di vista teorico penso di poter dare una descrizione del problema,

Sia \(\displaystyle R = \{1,\dotsc, 13\}\times\{ 1,\dotsc, 4 \} \) l'inseme delle 52 carte di un mazzo (ho destitto il segno con dei numeri per semplicità) e \(\mathfrak{S}_4\) il gruppo delle permutazioni di 4 elementi. Consideriamo quindi l'azione di \(\mathfrak{S}_4\) su \(R\) definita come \(\sigma\colon (m,n) \mapsto (m, \sigma(n))\).

Sia quindi \(\displaystyle D(R, 9) \) l'insieme dei sottoinsiemi di \(R\) di \(9\) elementi. Quello che TommyB1992 richiede è definire un algoritmo che trova un singolo elemento per ogni classe di equivalenza definita dall'azione di \(\mathfrak{S}_4\) su \(\displaystyle D(R, 9) \). Corretto?

Se il problema fosse contare le classi di equivalenza penso che punterei a sfruttare il teorema di enumerazione di Polya1 (che sinceramente dovrei andare a riguardarmi).
Rispondi al messaggio