GNU/Linux >> Tutoriels Linux >  >> Linux

Résoudre Wordle en utilisant la ligne de commande Linux

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.

Plus de ressources Linux

  • Aide-mémoire des commandes Linux
  • Aide-mémoire des commandes Linux avancées
  • Cours en ligne gratuit :Présentation technique de RHEL
  • Aide-mémoire sur le réseau Linux
  • Aide-mémoire SELinux
  • Aide-mémoire sur les commandes courantes de Linux
  • Que sont les conteneurs Linux ?
  • Nos derniers articles Linux

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 dossier. 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 ce grep commande :

$ 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 :Le ^ 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 un é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 a , mais pas en première position. Ma liste ne doit 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 la commande recherche également du texte comme grep , mais sans utiliser d'expressions régulières :

$ fgrep a myguess > myguess2

Cela fait passer ma liste de suppositions possibles 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 a en première position, ce que je ne veux pas. Le jeu indiquait déjà la lettre a 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 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 grep supplémentaire 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 douce .

Troisième essai

Cette fois, les lettres b et un ont été surlignés en vert, ce qui signifie que j'ai ces lettres dans la bonne position. La lettrel é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 , pour que je puisse 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 l n'importe où sauf en troisième position :

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

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

$ 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 les supprimer de ma liste de suppositions avec un autre grep inversé rechercher :

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

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

$ cat myguess3
babul
bailo
bakal
bakli
banal
bauld
baulk

Je vais choisir banal comme 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.


Linux
  1. Comment utiliser la commande Linux grep

  2. Une introduction à l'utilisation de tcpdump sur la ligne de commande Linux

  3. Utilisation de la force sur la ligne de commande Linux

  4. Avoir une vache à la ligne de commande Linux

  5. Enfermez-vous sur la ligne de commande Linux

Utiliser plus pour afficher les fichiers texte sur la ligne de commande Linux

Résoudre un puzzle en ligne de commande Linux avec nudoku

Utilisation de less pour afficher les fichiers texte sur la ligne de commande Linux

Utilisation de la commande GREP sous Linux avec des exemples

Maîtrisez la ligne de commande Linux

Utilisation de la commande grep sous Linux