IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Expressions régulières et poker


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 7
    Par défaut Expressions régulières et poker
    Bonjour,

    A titre personnel, je code un petit jeu en C#.

    Ce jeu s'apparente pas mal au poker puisqu'il s'agit la aussi d'un jeu de combinaison.

    Je cherche à identifier si une main (de 5 cartes) contient ou non certaines combinaisons. Et là, je me suis dis "Tiens, les expressions régulières pourraient être utiles ici !".
    C'est une fonctionnalité que je trouve assez pratique à utiliser et le cas semblait s'y prêter : trouver deux cartes identiques ou bien deux groupes de deux cartes identiques au sein d'une chaine...
    Pour cela, on va dire que chaque carte s'écrit avec un chiffre ou une lettre :
    As => 1, 2 =>2, .... 9=>9, 10 => 0, Valet => V, Dame => D, Roi => R.

    Quelle expression régulière utiliser dans ce cas pour voir s'il y a
    - un brelan ?
    - un full ?

    Pour le brelan, j'ai trouvé si je trie les cartes par ordre (les valeurs identiques seront a la suite l'une de l'autre)
    un petit marche plutôt bien mais je me demandais comment j'aurais fait si au lieu de 3 fois, c'était 100 fois qu'il fallait trouver le motif.
    Quelquechose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @"([0-9VDR]\1{100, 100}"
    ???
    Maintenant, "pour le fun", est ce qu'il y a un moyen de le faire sans trier les "cartes" ?

    Pour le full, c'est un peu plus compliqué mais je pensais au même genre de truc que pour le brelan et une alternative du genre ((2 cartes identiques puis 3 cartes identiques) | (3 cartes identiques puis 2 cartes identiques)).
    La encore, même question, est ce qu'on pourrait le faire sans trier ?

    Je sais que l'on peut facilement résoudre ce genre de problème avec autre chose que des expressions régulières mais imaginons que je sois buté et que je veuille absolument faire comme ça

    Merci de votre aide et bonne journée à tous.

  2. #2
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    A ma connaissance, les expressions régulières permettent d'identifier la présence ou non d'un motif dans une chaîne, mais pas le nombre d'occurrences.

    Si les cartes ne sont pas triées, chaque motif sera un seul caractère et il faudra donc parcourir la chaîne caractère par caractère pour dénombrer les occurrences.

    Il manque l'information de couleur dans ton exposé. Comment ferais-tu pour identifier une couleur ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 7
    Par défaut
    Merci de la réponse.

    Pour le jeu en question, la couleur de la carte n'est pas utile, pas pour l'instant en tout cas.

    Pour le brelan, il me semble que j'avais réussi à obtenir une expression qui marchait pour des cartes non triées.

    Ca devait être un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @"(?<gr1>[0-9VDR]).*\<gr1>.*\<gr1>"
    En gros on cherche un caractère, on le capture, et on cherche un motif ou il a ce caractere, nimporte quoi apres, encore ce caractère, nimporte quoi et encore ce caractère. Je ne me rappelle plus si ça fonctionnait mais il me semble que oui.

    Bon c'est pas grave de toute façon, je n'utilise pas les expressions régulières finalement mais je pensais que ce genre de motif pouvait être recherché avec des Regex. Apparemment j'ai un peu surestimé les possibilités.
    Faut dire qu'à force d'en mettre partout, on a tendance à vouloir en mettre encore plus partout

    Je vérifie mon expression et je mets ce message en résolu.


    Bonne journée à tous.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 7
    Par défaut
    Je confirme,

    Le code suivant fonctionne sans trier les cartes pour un brelan :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private bool EstUnBrelan(String cartes)
    {
        Regex regexCheckThreeOfAKind = new Regex(@"(?<gr1>[0-9VDR]).*\<gr1>.*\<gr1>");
        return regexCheckThreeOfAKind.IsMatch(cartes);
    }
    Du coup, on peut surement faire un truc dans le même genre pour un full mais bon, je regarderai ça à l'occasion, je ne vous embête pas plus longtemps.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] Expression régulières : Balises <SCRIPT>
    Par Gwipi dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2006, 23h25
  2. Expression réguliére
    Par Mad_Max dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 16/09/2003, 18h17
  3. [expression régulière] mon cerveau fait des noeuds..
    Par nawac dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 27/05/2003, 10h06
  4. Expressions réguliéres
    Par Tooms dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2002, 18h42
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo