Confrontare numeri di una list<>

di il
7 risposte

Confrontare numeri di una list<>

Buonasera a tutti ...stavo facendo un pò di esercizi che ho trovato in internet, purtroppo non hanno la risposta quindi se riesce bene altrimenti i dubbi permangono. In pratica dovevo frealizzare un piccolo solitario con le carte francesi...in una list ho inserito i 5 numeri estratti e dovrei vedere si ci sono numeri uguali per poi valutare se ho fatto coppia, doppia coppia, tris ecc. Io ho provato a fare di tutto ma non ci riesco esiste magari qualche metodo veloce per fare un confronto con 5 numeri? Grazie milee a tutti e scusate se non sono preciso nella domanda ma non sono molto esperto...

7 Risposte

  • Re: Confrontare numeri di una list<>

    Non sono un esperto di giochi con le carte ma parli di un solitario e poi citi condizioni che fanno parte del gioco del poker(coppia ,tris ,etc.),in ogni caso i numeri dovrebbero considerare anche il seme,ad esempio a poker potresti fare "colore" ,questo libro è gratuito e trovi un pò di esempi https://www.introprogramming.info/wp-content/uploads/2013/07/Books/CSharpEn/Fundamentals-of-Computer-Programming-with-CSharp-Nakov-eBook-v2013.pdf
  • Re: Confrontare numeri di una list<>

    È un esercizio, premendo un bottone vengono estratti 5 numeri dalle carte francesi e ovviamente per vincere le regole sono quelle del poker.
    Lasciando stare l'esercizio, volendo fare un confronto con 5 numeri e trovare quelli uguali quale sarebbe il modo più efficiente e veloce? Grazie
  • Re: Confrontare numeri di una list<>

    Altri suggerimenti?
  • Re: Confrontare numeri di una list<>

    Salve a tutti,
    brutalmente direi si possa anche usare Linq... in vb, trivialmente, cercando "ALMENO coppie" si puo' scrivere
    
    Dim iSearched As Integer = 2
    Dim lst As New List(Of Integer)({1, 2, 3, 4, 4})
    
    Dim result = From itm In lst Group By itm
          Into Group Where Group.Count() >= iSearched
                Select Key = itm, numbersCount = Group.Count()
    
    For Each obj In result
        Console.WriteLine("numero [{0}] rilevato {1} volte", obj.Key, obj.numbersCount)
    Next
    
    che trova { 4 } 2 volte e lo inlista...

    saluti omnia
    --
    Andrea
  • Re: Confrontare numeri di una list<>

    asql ha scritto:


    Salve a tutti,
    brutalmente direi si possa anche usare Linq... in vb, trivialmente, cercando "ALMENO coppie" si puo' scrivere
    
    Dim iSearched As Integer = 2
    Dim lst As New List(Of Integer)({1, 2, 3, 4, 4})
    
    Dim result = From itm In lst Group By itm
          Into Group Where Group.Count() >= iSearched
                Select Key = itm, numbersCount = Group.Count()
    
    For Each obj In result
        Console.WriteLine("numero [{0}] rilevato {1} volte", obj.Key, obj.numbersCount)
    Next
    
    che trova { 4 } 2 volte e lo inlista...

    saluti omnia
    --
    Andrea
    Non conosco molto bene il c# ancora meno il vb quindi mi viene difficile comprendere bene quello che hai scritto.
    Diciamo che non è un operazione così scontata come pensavo io. Spero in possibili altri chiarimenti
  • Re: Confrontare numeri di una list<>

    Salve,
    in questo specifico caso e' in effetti ' questione di "linguaggio" in se' visto che vengono usate peculiarita' specifiche di un framework (non un linguaggio, in quanto sono valide sia per c# che VB); ad ogni modo, quello sopra indicato , come indicato, "non e' proprio VB" ma l'espressione Linq di una query (aggregata e quindi ragionando su insiemi e non su singoli elementi) tecnicamente valida sia in C# che VB) redatta per il compilatore VB...
    l'azione eseguita puo' tecnicamente essere eseguita anche "a mano", e quello che Linq permette in 1 singola riga di espressione diventa, semanticamente:
    
    dichiara cardinalità_richiesta // iSearched = x
    dichiara una listaAccessoria di  oggetto {Key int, numberCount int}
    per ogni elemento int  in List{ 1, 2, 3, 4, 4} (
        se listaAccessoria contiene elemento 
            listaAccessoria[pointerElemento].numberCount += 1
        altrimenti
            listaAccessoria.aggiungi (elemento, 1)      
    )
    
    per ogni elemento in listaAccessoria (
        SE elemento.numberCount >=  cardinalità_richiesta
            indica elemento.Key e elemento.numberCount
    )
    
    questo e' ovviamente un metodo "basico" di ricerca....
    se hai "2" di questi insiemi (giocatoreA e giocatoreB), dovrai poi eventualmente ovviamente applicare ulteriori regole per l'assegnazione della vittoria, tipo, sempre semanticamente (ed in maniera assolutamente non corretta, perche' non ho confrontato tris, poker, .., ma ho solo verificato le quantita' di coppie e non altro)....
    
    dichiara cardinalità_richiesta = 2 // crca almeno 1 coppia, escludo le scale per comodita' :D
    ... aggregazione come sopra ma per 2 listeAccessorie, 1 per GiocatoreA e 1 per GiocatoreB
    
    // assumendo che Key vada da 1 a 13 (il K) e non ci sia differenza di peso tra i segni
    // regole di validazione vincitore
    quando TRUE
        se listaGiocatoreA.count > listaGiocatoreB 
            // GiocatoreA ha piu' coppie di GiocatoreB
            giocatoreA Vince
        se listaGiocatoreA.count < listaGiocatoreB 
            // GiocatoreB ha piu' coppie di GiocatoreA
            giocatoreB Vince
        diversamente ( // listaGiocatoreA.count = listaGiocatoreB 
            // parita'... cerca altre condizioni
            sommaA = somma delle Chiavi di A
            sommaB = somma delle Chiavi di B
            
            se sommaA > sommaB
                giocatoreA Vince
            se sommaA < sommaB
                giocatoreB Vince
            diversamente (
                // parita'... cerca altre condizioni
                ....
            )                     
        )        
    )
    di nuovo, ogni linguaggio ha peculiarita' e sintassi particolare, ma il ragionamento di base dovrebbe poter coincidere, resta solo trovare la sintassi per farlo... nel caso sia c# che VB, di nuovo, Linq potrebbe sicuramente di nuovo risolvere il problema...
    saluti omnia
    --
    Andrea
  • Re: Confrontare numeri di una list<>

    Magari, ti piacerebbe una procedura in C#, semplice come questa?
    
    List<int> numero = new List<int>(5) { 3, 8, 4, 2, 8 };
                for (int i = 0; i < 4; i++)
                    for (int j = i + 1; j < 5; j++)
                        if (numero[i] == numero[j])
                            Console.WriteLine($"Il numero al posto {i} è uguale al numero al posto {j}");
    
    N.B. l'indice i del vettore numero va da 0 a 4.

    Spero di esserti stato d'aiuto.
Devi accedere o registrarti per scrivere nel forum
7 risposte