Résoudre Wordle en utilisant la ligne de commande Linux


  • FrançaisFrançais


  • Je suis récemment devenu un peu obsédé par un jeu de puzzle de mots en ligne dans lequel vous avez six tentatives pour deviner un mot aléatoire de cinq lettres. Le mot change tous les jours et vous ne pouvez jouer qu’une fois par jour. Après chaque supposition, chacune des lettres de votre supposition est mise en surbrillance : le gris signifie que la lettre n’apparaît pas dans le mot mystère, le jaune signifie que la lettre apparaît dans le mot mais pas à cette position, et le vert signifie que la lettre apparaît dans le mot à cette position correcte.

    Voici comment vous pouvez utiliser la ligne de commande Linux pour vous aider à jouer à des jeux de devinettes comme Wordle. J’ai utilisé cette méthode pour m’aider à résoudre l’énigme du 6 janvier :

    Premier essai

    Les systèmes Linux conservent un dictionnaire de mots dans le /usr/share/dict/words déposer. Il s’agit d’un très long fichier texte brut. Le fichier de mots de mon système contient plus de 479 800 entrées. Le fichier contient à la fois des mots simples et des noms propres (noms, lieux, etc.).

    Pour commencer ma première supposition, je veux juste une liste de mots simples contenant exactement cinq lettres. Pour ce faire, j’utilise ceci grep commander:

    $ grep '^[a-z][a-z][a-z][a-z][a-z]$' /usr/share/dict/words > myguess

    le grep La commande utilise des expressions régulières pour effectuer des recherches. Vous pouvez faire beaucoup avec les expressions régulières, mais pour m’aider à résoudre Wordle, je n’ai besoin que des bases : ^ signifie le début d’une ligne, et le $ signifie la fin d’une ligne. Entre les deux, j’ai spécifié cinq instances de [a-z], qui indique toute lettre minuscule de a à z.

    je peux aussi utiliser le wc commande pour voir ma liste de mots possibles est “seulement” 15 000 mots :

    $ wc -l myguess
    15034 myguess

    Dans cette liste, j’ai choisi un mot de cinq lettres au hasard : acres. le une était réglé sur jaune, ce qui signifie que cette lettre existe quelque part dans le mot mystère mais pas en première position. Les autres lettres sont grises, donc je sais qu’elles n’existent pas dans le mot du jour.

    Deuxième essai

    Pour ma prochaine supposition, je veux obtenir une liste de tous les mots qui contiennent un une, mais pas en première position. Ma liste ne devrait pas non plus inclure les lettres c, r, e, ou s. Décomposons cela en étapes :

    Pour obtenir une liste de tous les mots avec un a, j’utilise le fgrep (chaînes fixes grep) commande. le fgrep commande recherche également du texte comme grep, mais sans utiliser d’expressions régulières :

    $ fgrep a myguess > myguess2

    Cela ramène ma liste possible de prochaines suppositions de 15 000 mots à 6 600 mots :

    $ wc -l myguess myguess2
     15034 myguess
      6634 myguess2
     21668 total

    Mais cette liste de mots comprend également la lettre une en première position, ce que je ne veux pas. Le jeu indiquait déjà la lettre une existe dans une autre position. Je peux modifier ma commande avec grep pour rechercher des mots contenant une autre lettre en première position. Cela réduit mes suppositions possibles à seulement 5 500 mots :

    $ fgrep a myguess | grep '^[b-z]' > myguess2
    $ wc -l myguess myguess2
     15034 myguess
      5566 myguess2
     20600 total

    Mais je sais que le mot mystère n’inclut pas non plus les lettres c, r, e, ou s. je peux en utiliser un autre grep commande pour omettre ces lettres de la recherche :

    $ fgrep a myguess | grep '^[b-z]' | grep -v '[cres]' > myguess2
    $ wc -l myguess myguess2
    15034 myguess
     1257 myguess2
    16291 total

    le -v option signifie inverser la recherche, donc grep ne renverra que les lignes qui ne correspondent pas à l’expression régulière [cres] ou la liste unique de lettres c, r, e, ou s. Avec ce supplément grep commande, j’ai considérablement réduit ma prochaine supposition à seulement 1 200 mots possibles avec un a quelque part mais pas en première position, et qui ne contiennent pas c, r, e, ou s.

    Après avoir consulté la liste, j’ai décidé d’essayer le mot embaumé.

    Troisième essai

    Cette fois, les lettres b et une ont été surlignés en vert, ce qui signifie que j’ai ces lettres dans la bonne position. La lettre je était jaune, de sorte que cette lettre existe ailleurs dans le mot, mais pas à cette position. Les lettres m et y sont gris, donc je peux les éliminer de ma prochaine supposition.

    Pour identifier ma prochaine liste de mots possibles, je peux utiliser un autre ensemble de grep commandes. Je sais que le mot commence par ba, donc je peux commencer ma recherche ici:

    $ grep '^ba' myguess2 > myguess3
    $ wc -l myguess3
    77 myguess3

    C’est seulement 77 mots! Je peux réduire cela davantage en recherchant des mots qui contiennent également la lettre je n’importe où sauf la troisième position :

    $ grep '^ba[^l]' myguess2 > myguess3
    $ wc -l myguess3
    61 myguess3

    le ^ à l’intérieur des crochets [^l] signifie pas cette liste de lettres, donc pas la lettre je. Cela porte ma liste de mots possibles à 61, qui ne contiennent pas tous la lettre je, que je peux éliminer en utilisant un autre grep chercher:

    $ grep '^ba[^l]' myguess2 | fgrep l > myguess3
    $ wc -l myguess3
    10 myguess3

    Certains de ces mots peuvent contenir les lettres m et y, qui ne sont pas dans le mot mystère d’aujourd’hui. Je peux supprimer ceux de ma liste de suppositions avec un autre inversé grep chercher:

    $ grep '^ba[^l]' myguess2 | fgrep l | grep -v '[my]' > myguess3
    $ wc -l myguess3
    7 myguess3

    Ma liste de mots possibles est maintenant très courte, seulement sept mots !

    $ cat myguess3
    babul
    bailo
    bakal
    bakli
    banal
    bauld
    baulk

    je choisirai banal comme un mot probable pour ma prochaine supposition, qui s’est avérée correcte.

    La puissance des expressions régulières

    La ligne de commande Linux fournit des outils puissants pour vous aider à faire un vrai travail. le grep et fgrep Les commandes offrent une grande flexibilité dans l’analyse des listes de mots. Pour un jeu de devinettes basé sur des mots, grep aidé à identifier une liste de 15 000 mots possibles du jour. Après avoir deviné et su quelles lettres apparaissaient et n’apparaissaient pas dans le mot mystère, grep et fgrep a aidé à réduire les options à 1 200 mots, puis à seulement sept mots. C’est la puissance de la ligne de commande.

    Source

    La Rédaction

    L'équipe rédactionnnelle du site

    Pour contacter personnellement le taulier :

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

    Copy code