Nedávno jsem se stal trochu posedlý online slovní logickou hrou, ve které máte šest pokusů uhodnout náhodné slovo z pěti písmen. Slovo se mění každý den a hrát můžete pouze jednou denně. Po každém uhodnutí se každé z písmen vašeho odhadu zvýrazní:šedá znamená, že se písmeno neobjevuje v tajném slově, žlutá znamená, že se písmeno objevuje ve slově, ale ne na této pozici, a zelená znamená, že se písmeno objevuje ve slově na ta správná poloha.
Další zdroje pro Linux
- Cheat pro příkazy Linuxu
- Cheat sheet pro pokročilé příkazy systému Linux
- Bezplatný online kurz:Technický přehled RHEL
- Síťový cheat pro Linux
- Cheat sheet SELinux
- Cheat pro běžné příkazy pro Linux
- Co jsou kontejnery systému Linux?
- Naše nejnovější články o Linuxu
Zde je návod, jak můžete použít příkazový řádek Linuxu, který vám pomůže hrát hádací hry, jako je Wordle. Tuto metodu jsem použil, aby mi pomohla vyřešit hádanku 6. ledna:
První pokus
Systémy Linux uchovávají slovník slov v /usr/share/dict/words
soubor. Toto je velmi dlouhý prostý textový soubor. Soubor slov mého systému obsahuje více než 479 800 záznamů. Soubor obsahuje jak prostá slova, tak vlastní podstatná jména (jména, místa atd.).
Chcete-li začít svůj první odhad, chci jen seznam jednoduchých slov, která mají přesně pět písmen. K tomu používám tento grep
příkaz:
$ grep '^[a-z][a-z][a-z][a-z][a-z]$' /usr/share/dict/words > myguess
grep
příkaz používá k vyhledávání regulární výrazy. S regulárními výrazy můžete dělat hodně, ale abych mi pomohl vyřešit Wordle, potřebuji pouze základy:^
znamená začátek řádku a $
znamená konec řádku. Mezi tím jsem uvedl pět instancí [a-z]
, což označuje jakékoli malé písmeno od a do z.
Mohu také použít wc
příkaz k zobrazení mého seznamu možných slov má „pouze“ 15 000 slov:
$ wc -l myguess
15034 myguess
Z tohoto seznamu jsem vybral náhodné pětipísmenné slovo:akry . a byla nastavena na žlutou, což znamená, že písmeno existuje někde v tajném slově, ale ne na první pozici. Ostatní písmena jsou šedá, takže vím, že v dnešním slově neexistují.
Druhý pokus
Pro svůj další odhad chci získat seznam všech slov, která obsahují a , ale ne na první pozici. Můj seznam by také neměl obsahovat písmena c ,r , e nebo s . Pojďme si to rozdělit na kroky:
Chcete-li získat seznam všech slov s a, používám fgrep
(pevné řetězce grep) příkaz. fgrep
příkaz také vyhledává text jako grep
, ale bez použití regulárních výrazů:
$ fgrep a myguess > myguess2
To snižuje můj možný seznam dalších odhadů z 15 000 slov na 6 600 slov:
$ wc -l myguess myguess2
15034 myguess
6634 myguess2
21668 total
Ale tento seznam slov obsahuje také písmeno a na první pozici, což nechci. Hra již označila písmeno a existuje v nějaké jiné poloze. Svůj příkaz mohu upravit pomocí grep
hledat slova obsahující na první pozici nějaké jiné písmeno. To zužuje mé možné odhady na pouhých 5 500 slov:
$ fgrep a myguess | grep '^[b-z]' > myguess2
$ wc -l myguess myguess2
15034 myguess
5566 myguess2
20600 total
Ale vím, že tajemné slovo také neobsahuje písmena c , r , e nebo s . Mohu použít jiný grep
příkaz k vynechání těchto písmen z vyhledávání:
$ fgrep a myguess | grep '^[b-z]' | grep -v '[cres]' > myguess2
$ wc -l myguess myguess2
15034 myguess
1257 myguess2
16291 total
-v
volba znamená invertovat vyhledávání, takže grep
vrátí pouze řádky, které neodpovídají regulárnímu výrazu [cres]
nebo jeden seznam písmen c , r , e nebo s . S tímto extra grep
příkazu, svůj další odhad jsem značně zúžil na pouhých 1200 možných slov s a někde, ale ne na první pozici, a která neobsahují c , r , e nebo s .
Po zhlédnutí seznamu jsem se rozhodl zkusit slovo balzámový .
Třetí pokus
Tentokrát písmena b a a byly zvýrazněny zeleně, což znamená, že mám tato písmena ve správné poloze. Písmenol bylo žluté, takže toto písmeno existuje někde jinde ve slově, ale ne na této pozici. Písmena m a y jsou šedé, takže je mohu z dalšího odhadu vyloučit.
K identifikaci mého dalšího seznamu možných slov mohu použít další sadu grep
příkazy. Vím, že slovo začíná ba , takže tam mohu začít hledat:
$ grep '^ba' myguess2 > myguess3
$ wc -l myguess3
77 myguess3
To je jen 77 slov! Mohu to dále zúžit hledáním slov, která také obsahují písmeno l kdekoli kromě třetí pozice:
$ grep '^ba[^l]' myguess2 > myguess3
$ wc -l myguess3
61 myguess3
^
uvnitř hranatých závorek [^l]
znamená ne tento seznam písmen, tedy ne písmeno l . Tím se můj seznam možných slov dostává na 61, z nichž ne všechna obsahují písmeno l , který mohu odstranit pomocí jiného grep
hledat:
$ grep '^ba[^l]' myguess2 | fgrep l > myguess3
$ wc -l myguess3
10 myguess3
Některá z těchto slov mohou obsahovat písmena m a y , které v dnešním tajemném slově nejsou. Mohu je odstranit ze svého seznamu odhadů pomocí dalšího obráceného grep
hledat:
$ grep '^ba[^l]' myguess2 | fgrep l | grep -v '[my]' > myguess3
$ wc -l myguess3
7 myguess3
Můj seznam možných slov je nyní velmi krátký, pouze sedm slov!
$ cat myguess3
babul
bailo
bakal
bakli
banal
bauld
baulk
Vyberu banální jako pravděpodobné slovo pro můj další odhad, který byl náhodou správný.
Síla regulárních výrazů
Příkazový řádek Linuxu poskytuje výkonné nástroje, které vám pomohou dělat skutečnou práci. grep
a fgrep
příkazy nabízejí velkou flexibilitu při skenování seznamů slov. Pro hru na hádání založené na slovech grep
pomohl identifikovat seznam 15 000 možných slov dne. Po uhádnutí a zjištění, jaká písmena se v tajném slově grep
objevila a která ne a fgrep
pomohl zúžit možnosti na 1200 slov a poté pouze na sedm slov. To je síla příkazového řádku.