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.