GNU/Linux >> Znalost Linux >  >> Linux

Řešte Wordle pomocí příkazového řádku Linuxu

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.


Linux
  1. Jak používat Linuxový příkaz grep

  2. Úvod do používání tcpdump na příkazovém řádku Linuxu

  3. Použití síly na příkazovém řádku Linuxu

  1. Mít krávu na příkazovém řádku Linuxu

  2. Přihlaste se do příkazového řádku Linuxu

  3. Jak extrahovat soubor tar.gz v Linuxu pomocí příkazového řádku

  1. Jak odebrat uživatele v Linuxu pomocí příkazového řádku

  2. Práce s rourami na příkazovém řádku Linuxu

  3. Používání Disku Google z příkazového řádku systému Linux