GNU/Linux >> Tutoriales Linux >  >> Linux

Resuelve Wordle usando la línea de comandos de Linux

Recientemente me obsesioné un poco con un juego de rompecabezas de palabras en línea en el que tienes seis intentos para adivinar una palabra aleatoria de cinco letras. La palabra cambia todos los días y solo puedes jugar una vez al día. Después de cada suposición, se resalta cada una de las letras en su suposición:gris significa que la letra no aparece en la palabra misteriosa, amarillo significa que la letra aparece en la palabra pero no en esa posición, y verde significa que la letra aparece en la palabra en esa posición correcta.

Más recursos de Linux

  • Hoja de trucos de los comandos de Linux
  • Hoja de trucos de comandos avanzados de Linux
  • Curso en línea gratuito:Descripción general técnica de RHEL
  • Hoja de trucos de red de Linux
  • Hoja de trucos de SELinux
  • Hoja de trucos de los comandos comunes de Linux
  • ¿Qué son los contenedores de Linux?
  • Nuestros últimos artículos sobre Linux

Así es como puede usar la línea de comando de Linux para ayudarlo a jugar juegos de adivinanzas como Wordle. Usé este método para ayudarme a resolver el acertijo del 6 de enero:

Primer intento

Los sistemas Linux mantienen un diccionario de palabras en el /usr/share/dict/words expediente. Este es un archivo de texto sin formato muy largo. El archivo de palabras de mi sistema tiene más de 479.800 entradas. El archivo contiene tanto palabras simples como nombres propios (nombres, lugares, etc.).

Para comenzar mi primera conjetura, solo quiero una lista de palabras sencillas que tengan exactamente cinco letras. Para hacer eso, uso este grep comando:

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

El grep El comando utiliza expresiones regulares para realizar búsquedas. Puedes hacer mucho con las expresiones regulares, pero para ayudarme a resolver Wordle, solo necesito lo básico:el ^ significa el comienzo de una línea, y el $ significa el final de una línea. En el medio, he especificado cinco instancias de [a-z] , que indica cualquier letra minúscula de la a a la z.

También puedo usar el wc el comando para ver mi lista de palabras posibles es "solo" 15,000 palabras:

$ wc -l myguess
15034 myguess

De esa lista, elegí una palabra de cinco letras al azar:acres . El un se configuró en amarillo, lo que significa que la letra existe en algún lugar de la palabra misteriosa pero no en la primera posición. Las otras letras son grises, así que sé que no existen en la palabra del día.

Segundo intento

Para mi próxima suposición, quiero obtener una lista de todas las palabras que contienen una a , pero no en la primera posición. Mi lista tampoco debe incluir las letras c ,r , e , o s . Vamos a dividir esto en pasos:

Para obtener una lista de todas las palabras con a, uso el fgrep (cadenas fijas grep) comando. El fgrep El comando también busca texto como grep , pero sin usar expresiones regulares:

$ fgrep a myguess > myguess2

Eso reduce mi posible lista de próximas conjeturas de 15 000 palabras a 6600 palabras:

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

Pero esa lista de palabras también incluye la letra a en la primera posición, que no quiero. El juego ya indicaba la letra a existe en alguna otra posición. Puedo modificar mi comando con grep buscar palabras que contengan alguna otra letra en la primera posición. Eso reduce mis posibles conjeturas a solo 5500 palabras:

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

Pero sé que la palabra misteriosa tampoco incluye las letras c , r , e , o s . Puedo usar otro grep comando para omitir esas letras de la búsqueda:

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

El -v opción significa invertir la búsqueda, por lo que grep solo devolverá las líneas que no coincidan con la expresión regular [cres] o la lista única de letras c , r , e , o s . Con este grep adicional comando, reduje mi próxima conjetura considerablemente a solo 1200 palabras posibles con una a en alguna parte pero no en la primera posición, y que no contienen c , r , e , o s .

Después de ver la lista, decidí probar con la palabra balsámico .

Tercer intento

Esta vez, las letras b y un fueron resaltadas en verde, lo que significa que tengo esas letras en la posición correcta. La letra l era amarilla, por lo que esa letra existe en otra parte de la palabra, pero no en esa posición. Las letras m y y son grises, así que puedo eliminarlos de mi próxima suposición.

Para identificar mi próxima lista de posibles palabras, puedo usar otro conjunto de grep comandos Sé que la palabra comienza con ba , para que pueda comenzar mi búsqueda allí:

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

¡Eso son solo 77 palabras! Puedo acotar más buscando palabras que también contengan la letra l en cualquier lugar menos en la tercera posición:

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

El ^ dentro de los corchetes [^l] significa no esta lista de letras, así que no la letra l . Eso lleva mi lista de posibles palabras a 61, no todas las cuales contienen la letra l , que puedo eliminar usando otro grep buscar:

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

Algunas de esas palabras pueden contener las letras m y y , que no están en la palabra misteriosa de hoy. Puedo eliminarlos de mi lista de conjeturas con un grep invertido más buscar:

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

Mi lista de posibles palabras es muy corta ahora, ¡solo siete palabras!

$ cat myguess3
babul
bailo
bakal
bakli
banal
bauld
baulk

Elegiré banales como una palabra probable para mi próxima conjetura, que resultó ser correcta.

El poder de las expresiones regulares

La línea de comandos de Linux proporciona herramientas poderosas para ayudarlo a hacer un trabajo real. El grep y fgrep Los comandos ofrecen una gran flexibilidad en la exploración de listas de palabras. Para un juego de adivinanzas basado en palabras, grep ayudó a identificar una lista de 15.000 posibles palabras del día. Después de adivinar y saber qué letras aparecían y no aparecían en la palabra misteriosa, grep y fgrep ayudó a reducir las opciones a 1200 palabras y luego a solo siete palabras. Ese es el poder de la línea de comandos.


Linux
  1. Una introducción al uso de tcpdump en la línea de comandos de Linux

  2. Usando la fuerza en la línea de comando de Linux

  3. Tener una vaca en la línea de comandos de Linux

  4. Cómo extraer el archivo tar.gz en Linux usando la línea de comandos

  5. Cómo eliminar un usuario en Linux usando la línea de comandos

Uso de más para ver archivos de texto en la línea de comandos de Linux

Resuelve un rompecabezas en la línea de comandos de Linux con nudoku

Uso de less para ver archivos de texto en la línea de comandos de Linux

Usando el comando GREP en Linux con ejemplos

Domina la línea de comandos de Linux

Uso del comando grep en Linux