GNU/Linux >> Linux Esercitazione >  >> Linux

Risolvi Wordle usando la riga di comando di Linux

Recentemente sono diventato un po' ossessionato da un gioco di puzzle di parole online in cui hai sei tentativi per indovinare una parola casuale di cinque lettere. La parola cambia ogni giorno e puoi giocare solo una volta al giorno. Dopo ogni ipotesi, ciascuna delle lettere nella tua ipotesi viene evidenziata:grigio significa che la lettera non appare nella parola misteriosa, giallo significa che la lettera appare nella parola ma non in quella posizione e verde significa che la lettera appare nella parola in quella posizione corretta.

Più risorse Linux

  • Comandi Linux cheat sheet
  • Cheat sheet sui comandi avanzati di Linux
  • Corso online gratuito:Panoramica tecnica RHEL
  • Cheat sheet della rete Linux
  • Cheat sheet di SELinux
  • Cheat sheet dei comandi comuni di Linux
  • Cosa sono i container Linux?
  • I nostri ultimi articoli su Linux

Ecco come puoi usare la riga di comando di Linux per aiutarti a giocare a indovinelli come Wordle. Ho usato questo metodo per aiutarmi a risolvere il puzzle del 6 gennaio:

Primo tentativo

I sistemi Linux mantengono un dizionario di parole in /usr/share/dict/words file. Questo è un file di testo normale molto lungo. Il file delle parole del mio sistema contiene oltre 479.800 voci. Il file contiene sia parole semplici che nomi propri (nomi, luoghi e così via).

Per iniziare la mia prima ipotesi, voglio solo un elenco di parole semplici lunghe esattamente cinque lettere. Per farlo, uso questo grep comando:

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

Il grep comando utilizza espressioni regolari per eseguire ricerche. Puoi fare molto con le espressioni regolari, ma per aiutarmi a risolvere Wordle, ho solo bisogno delle basi:Il ^ indica l'inizio di una riga e il $ significa la fine di una riga. Nel mezzo, ho specificato cinque istanze di [a-z] , che indica qualsiasi lettera minuscola dalla a alla z.

Posso anche usare il wc il comando per vedere il mio elenco di parole possibili è "solo" 15.000 parole:

$ wc -l myguess
15034 myguess

Da quell'elenco, ho scelto una parola di cinque lettere a caso:acres . La a era impostato su giallo, il che significa che la lettera esiste da qualche parte nella parola misteriosa ma non nella prima posizione. Le altre lettere sono grigie, quindi so che non esistono nella parola del giorno.

Secondo tentativo

Per la mia prossima ipotesi, voglio ottenere un elenco di tutte le parole che contengono una a , ma non in prima posizione. Il mio elenco non dovrebbe inoltre includere le lettere c , r , e o s . Analizziamolo in passaggi:

Per ottenere un elenco di tutte le parole con una a, uso il fgrep (stringhe fisse grep). Il fgrep comando cerca anche testo come grep , ma senza usare espressioni regolari:

$ fgrep a myguess > myguess2

Ciò riduce il mio possibile elenco di ipotesi successive da 15.000 a 6.600 parole:

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

Ma quell'elenco di parole include anche la lettera a in prima posizione, cosa che non voglio. Il gioco indicava già la lettera a esiste in qualche altra posizione. Posso modificare il mio comando con grep cercare le parole che contengono qualche altra lettera nella prima posizione. Ciò riduce le mie possibili ipotesi a sole 5.500 parole:

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

Ma so che anche la parola misteriosa non include le lettere c , r , e o s . Posso usare un altro grep comando per omettere quelle lettere dalla ricerca:

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

Il -v opzione significa invertire la ricerca, quindi grep restituirà solo le righe che non corrispondono all'espressione regolare [cres] oppure il singolo elenco di lettere c , r , e o s . Con questo extra grep comando, ho ridotto considerevolmente la mia ipotesi successiva a sole 1.200 possibili parole con una a da qualche parte ma non nella prima posizione, e che non contengono c , r , e o s .

Dopo aver visualizzato l'elenco, ho deciso di provare la parola balsamico .

Terzo tentativo

Questa volta, le lettere b e a sono stati evidenziati in verde, il che significa che ho quelle lettere nella posizione corretta. La lettera l era giallo, quindi quella lettera esiste da qualche altra parte nella parola, ma non in quella posizione. Le lettere m e y sono grigi, quindi posso eliminarli dalla mia prossima ipotesi.

Per identificare il mio prossimo elenco di possibili parole, posso usare un altro insieme di grep comandi. So che la parola inizia con ba , così posso iniziare la mia ricerca da lì:

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

Sono solo 77 parole! Posso restringere ulteriormente il campo cercando parole che contengano anche la lettera l ovunque tranne che nella terza posizione:

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

Il ^ tra parentesi quadre [^l] non significa questo elenco di lettere, quindi non la lettera l . Questo porta il mio elenco di parole possibili a 61, non tutte contengono la lettera l , che posso eliminare usando un altro grep cerca:

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

Alcune di queste parole potrebbero contenere le lettere m e y , che non sono nella parola misteriosa di oggi. Posso rimuoverli dal mio elenco di ipotesi con un altro grep invertito cerca:

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

La mia lista di possibili parole adesso è molto breve, solo sette parole!

$ cat myguess3
babul
bailo
bakal
bakli
banal
bauld
baulk

Sceglierò banale come parola probabile per la mia prossima ipotesi, che è stata corretta.

Il potere delle espressioni regolari

La riga di comando di Linux fornisce potenti strumenti per aiutarti a fare un lavoro reale. Il grep e fgrep i comandi offrono una grande flessibilità nella scansione di elenchi di parole. Per un gioco di indovinelli basato sulle parole, grep ha contribuito a identificare un elenco di 15.000 possibili parole del giorno. Dopo aver indovinato e saputo quali lettere facevano e non apparivano nella parola misteriosa, grep e fgrep ha contribuito a restringere le opzioni a 1.200 parole e quindi solo a sette parole. Questo è il potere della riga di comando.


Linux
  1. Come usare il comando Linux grep

  2. Un'introduzione all'uso di tcpdump nella riga di comando di Linux

  3. Usando la forza sulla riga di comando di Linux

  4. Avere una mucca sulla riga di comando di Linux

  5. Entra nella riga di comando di Linux

Utilizzo di più per visualizzare i file di testo dalla riga di comando di Linux

Risolvi un enigma dalla riga di comando di Linux con Nudoku

Utilizzo di less per visualizzare i file di testo dalla riga di comando di Linux

Utilizzo del comando GREP in Linux con esempi

Padroneggia la riga di comando di Linux

Uso del comando grep in Linux