3 votes

Comment savoir si j'ai gagné à la loterie en C#

Alors, j'essaie de faire quelque chose pour vérifier si j'ai gagné à la loterie automatiquement.

Le jeu auquel je joue comporte 25 numéros, vous pouvez en choisir 15.

si vous touchez 15 numéros, vous gagnez! (ils n'ont pas besoin d'être dans l'ordre)

J'ai une liste avec tous les jeux appelée : 'TodosJogos' et mon pari appelé : 'Jogado'

Maintenant, je fais de cette manière : (que je pense être terrible)

 private void VerificaVitoria(Jogo Jogado, string TipoJogo)
        {
            bool Ganhou;
            List LstClassificadas = new List();

            LstClassificadas = TodosJogos.Where(x => x.N1 == Jogado.N1 ||
                x.N1 == Jogado.N2 ||
                x.N1 == Jogado.N3 ||
                x.N1 == Jogado.N4 ||
                x.N1 == Jogado.N5 ||
                x.N1 == Jogado.N6 ||
                x.N1 == Jogado.N7 ||
                x.N1 == Jogado.N8 ||
                x.N1 == Jogado.N9 ||
                x.N1 == Jogado.N10 ||
                x.N1 == Jogado.N11 ||
                x.N1 == Jogado.N12 ||
                x.N1 == Jogado.N13 ||
                x.N1 == Jogado.N14 ||
                x.N1 == Jogado.N15).ToList();

            LstClassificadas = LstClassificadas.Where(x => x.N2 == Jogado.N1 ||
               x.N2 == Jogado.N2 ||
               x.N2 == Jogado.N3 ||
               x.N2 == Jogado.N4 ||
               x.N2 == Jogado.N5 ||
               x.N2 == Jogado.N6 ||
               x.N2 == Jogado.N7 ||
               x.N2 == Jogado.N8 ||
               x.N2 == Jogado.N9 ||
               x.N2 == Jogado.N10 ||
               x.N2 == Jogado.N11 ||
               x.N2 == Jogado.N12 ||
               x.N2 == Jogado.N13 ||
               x.N2 == Jogado.N14 ||
               x.N2 == Jogado.N15).ToList();

            LstClassificadas = LstClassificadas.Where(x => x.N3 == Jogado.N1 ||
                 x.N3 == Jogado.N2 ||
                 x.N3 == Jogado.N3 ||
                 x.N3 == Jogado.N4 ||
                 x.N3 == Jogado.N5 ||
                 x.N3 == Jogado.N6 ||
                 x.N3 == Jogado.N7 ||
                 x.N3 == Jogado.N8 ||
                 x.N3 == Jogado.N9 ||
                 x.N3 == Jogado.N10 ||
                 x.N3 == Jogado.N11 ||
                 x.N3 == Jogado.N12 ||
                 x.N3 == Jogado.N13 ||
                 x.N3 == Jogado.N14 ||
                 x.N3 == Jogado.N15).ToList();

            //.....

            Ganhou = LstClassificadas.Count > 0 ? true : false;

            if (Ganhou)
            {
                MessageBox.Show("Vous avez gagné dans le jeu : " + TipoJogo);
            }

        }

Cela ressemble à cette requête :

select * from jogos
where n1 in(8,18,16,7,5,20,9,6,10,17,22,3,14,21,15)
and n2 in(8,18,16,7,5,20,9,6,10,17,22,3,14,21,15)
and n3 in(8,18,16,7,5,20,9,6,10,17,22,3,14,21,15)
and n4 in(8,18,16,7,5,20,9,6,10,17,22,3,14,21,15)
and n5 in(8,18,16,7,5,20,9,6,10,17,22,3,14,21,15)
and n6 in(8,18,16,7,5,20,9,6,10,17,22,3,14,21,15)
and n7 in(8,18,16,7,5,20,9,6,10,17,22,3,14,21,15)
and n8 in(8,18,16,7,5,20,9,6,10,17,22,3,14,21,15)
and n9 in(8,18,16,7,5,20,9,6,10,17,22,3,14,21,15)
and n10 in(8,18,16,7,5,20,9,6,10,17,22,3,14,21,15)
and n11 in(8,18,16,7,5,20,9,6,10,17,22,3,14,21,15)
and n12 in(8,18,16,7,5,20,9,6,10,17,22,3,14,21,15)
and n13 in(8,18,16,7,5,20,9,6,10,17,22,3,14,21,15)
and n14 in(8,18,16,7,5,20,9,6,10,17,22,3,14,21,15)
and n15 in(8,18,16,7,5,20,9,6,10,17,22,3,14,21,15)

Y a-t-il un meilleur moyen de le faire ?

32voto

Eric Lippert Points 300275

Deux façons de résoudre votre problème.

Représentez une combinaison gagnante comme un ensemble de quinze entiers:

HashSet

Vous avez une séquence de jeux gagnants:

IEnumerable>

et un HashSet spécifique. Vous souhaitez savoir si l'ensemble spécifique correspond exactement à l'un des ensembles gagnants.

Méthode Un

static bool DidIWin(IEnumerable> winningNumbers, HashSet myNumbers)
{
    return winningNumbers
      .Where(winningNumber => myNumbers.SetEquals(winningNumber))
      .Any();
}

Ou même

static bool DidIWin(IEnumerable> winningNumbers, HashSet myNumbers)
{
    return winningNumbers
      .Any(winningNumber => myNumbers.SetEquals(winningNumber));
}

Méthode Deux

static bool DidIWin(IEnumerable> winningNumbers, HashSet myNumbers)
{
    return false;
}
La méthode deux est beaucoup plus rapide. Cependant, elle donne le résultat incorrect en moyenne une fois sur trois millions de numéros gagnants. Cela montre que parfois, vous pouvez obtenir une grande amélioration des performances en acceptant une petite inexactitude.

-)

3voto

p.s.w.g Points 81433

En juger par votre requête SQL, je pense que c'est ce que vous voulez:

var lotteryNumbers = new int[] { ... };
var results =
    from j in jogos
    where lotteryNumbers.Contains(j.n1) &&
          lotteryNumbers.Contains(j.n2) &&
          lotteryNumbers.Contains(j.n3) &&
          lotteryNumbers.Contains(j.n4) &&
          lotteryNumbers.Contains(j.n5) &&
          lotteryNumbers.Contains(j.n6) &&
          lotteryNumbers.Contains(j.n7) &&
          lotteryNumbers.Contains(j.n8) &&
          lotteryNumbers.Contains(j.n9) &&
          lotteryNumbers.Contains(j.n10) &&
          lotteryNumbers.Contains(j.n11) &&
          lotteryNumbers.Contains(j.n12) &&
          lotteryNumbers.Contains(j.n13) &&
          lotteryNumbers.Contains(j.n14) &&
          lotteryNumbers.Contains(j.n15)
    select j;

Ou en syntaxe fluide

var results =
    jogos.Where(j =>
          lotteryNumbers.Contains(j.n1) &&
          lotteryNumbers.Contains(j.n2) &&
          lotteryNumbers.Contains(j.n3) &&
          lotteryNumbers.Contains(j.n4) &&
          lotteryNumbers.Contains(j.n5) &&
          lotteryNumbers.Contains(j.n6) &&
          lotteryNumbers.Contains(j.n7) &&
          lotteryNumbers.Contains(j.n8) &&
          lotteryNumbers.Contains(j.n9) &&
          lotteryNumbers.Contains(j.n10) &&
          lotteryNumbers.Contains(j.n11) &&
          lotteryNumbers.Contains(j.n12) &&
          lotteryNumbers.Contains(j.n13) &&
          lotteryNumbers.Contains(j.n14) &&
          lotteryNumbers.Contains(j.n15));

Cela suppose cependant que vous n'ayez pas de doublons dans lotteryNumbers ou dans j.n1 .. j.n15. Sinon, vous pourriez obtenir des résultats inattendus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X