GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Lösen Sie Wordle über die Linux-Befehlszeile

Ich bin seit kurzem ein wenig besessen von einem Online-Worträtselspiel, bei dem Sie sechs Versuche haben, ein zufälliges Wort mit fünf Buchstaben zu erraten. Das Wort ändert sich jeden Tag und Sie können nur einmal am Tag spielen. Nach jedem Raten wird jeder der Buchstaben Ihrer Vermutung hervorgehoben:Grau bedeutet, dass der Buchstabe nicht im Rätselwort vorkommt, Gelb bedeutet, dass der Buchstabe im Wort vorkommt, aber nicht an dieser Position, und Grün bedeutet, dass der Buchstabe im Wort an vorkommt diese richtige Position.

Weitere Linux-Ressourcen

  • Spickzettel für Linux-Befehle
  • Spickzettel für fortgeschrittene Linux-Befehle
  • Kostenloser Online-Kurs:RHEL Technical Overview
  • Spickzettel für Linux-Netzwerke
  • SELinux-Spickzettel
  • Spickzettel für allgemeine Linux-Befehle
  • Was sind Linux-Container?
  • Unsere neuesten Linux-Artikel

So können Sie die Linux-Befehlszeile verwenden, um Ratespiele wie Wordle zu spielen. Ich habe diese Methode verwendet, um mir beim Lösen des Rätsels vom 6. Januar zu helfen:

Erster Versuch

Linux-Systeme führen ein Wörterverzeichnis in /usr/share/dict/words Datei. Dies ist eine sehr lange Nur-Text-Datei. Die Wortdatei meines Systems enthält über 479.800 Einträge. Die Datei enthält sowohl einfache Wörter als auch Eigennamen (Namen, Orte usw.).

Um mit meiner ersten Vermutung zu beginnen, möchte ich nur eine Liste einfacher Wörter, die genau fünf Buchstaben lang sind. Dazu verwende ich dieses grep Befehl:

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

Das grep Der Befehl verwendet reguläre Ausdrücke, um Suchen durchzuführen. Mit regulären Ausdrücken kann man viel machen, aber um mir bei der Lösung von Wordle zu helfen, brauche ich nur die Grundlagen:Den ^ bedeutet Zeilenanfang und $ bedeutet Zeilenende. Dazwischen habe ich fünf Instanzen von [a-z] angegeben , das einen beliebigen Kleinbuchstaben von a bis z angibt.

Ich kann auch das wc verwenden Befehl zum Anzeigen meiner Liste möglicher Wörter ist "nur" 15.000 Wörter:

$ wc -l myguess
15034 myguess

Aus dieser Liste habe ich ein zufälliges Wort mit fünf Buchstaben ausgewählt:acres . Das a wurde auf Gelb gesetzt, was bedeutet, dass der Buchstabe irgendwo im Rätselwort vorhanden ist, aber nicht an der ersten Position. Die anderen Buchstaben sind grau, daher weiß ich, dass sie im Wort des Tages nicht existieren.

Zweiter Versuch

Für meine nächste Vermutung möchte ich eine Liste aller Wörter erhalten, die ein a enthalten , aber nicht an erster Stelle. Meine Liste sollte auch nicht die Buchstaben c enthalten ,r , e , oder s . Lassen Sie uns dies in Schritte unterteilen:

Um eine Liste aller Wörter mit einem a zu erhalten, verwende ich den fgrep (fixed strings grep) Befehl. Der fgrep Der Befehl sucht auch nach Text wie grep , aber ohne Verwendung regulärer Ausdrücke:

$ fgrep a myguess > myguess2

Das reduziert meine mögliche Liste der nächsten Vermutungen von 15.000 Wörtern auf 6.600 Wörter:

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

Aber diese Wortliste enthält auch den Buchstaben a in der ersten Position, was ich nicht will. Das Spiel hat bereits den Buchstaben a angezeigt in einer anderen Position vorhanden ist. Ich kann meinen Befehl mit grep ändern um nach Wörtern zu suchen, die einen anderen Buchstaben an der ersten Position enthalten. Das schränkt meine möglichen Vermutungen auf nur 5.500 Wörter ein:

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

Aber ich weiß, dass das Rätselwort auch nicht die Buchstaben c enthält , r , e , oder s . Ich kann ein anderes grep verwenden Befehl, diese Buchstaben aus der Suche auszulassen:

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

Das -v Option bedeutet, die Suche umzukehren, also grep gibt nur die Zeilen zurück, die nicht mit dem regulären Ausdruck [cres] übereinstimmen oder die einzelne Buchstabenliste c , r , e , oder s . Mit diesem zusätzlichen grep Befehl, habe ich meine nächste Vermutung erheblich auf nur 1.200 mögliche Wörter mit einem a irgendwo, aber nicht an der ersten Position eingegrenzt, und die kein c enthalten , r , e , oder s .

Nachdem ich mir die Liste angesehen hatte, beschloss ich, das Wort balmy auszuprobieren .

Dritter Versuch

Diesmal die Buchstaben b und ein wurden grün hervorgehoben, was bedeutet, dass ich diese Buchstaben an der richtigen Position habe. Der Buchstabe l war gelb, also existiert dieser Buchstabe an einer anderen Stelle im Wort, aber nicht an dieser Position. Die Buchstaben m und y sind grau, also kann ich diese aus meiner nächsten Vermutung eliminieren.

Um meine nächste Liste möglicher Wörter zu identifizieren, kann ich einen anderen Satz von grep verwenden Befehle. Ich weiß, dass das Wort mit ba beginnt , damit ich meine Suche dort beginnen kann:

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

Das sind nur 77 Wörter! Ich kann das weiter eingrenzen, indem ich nach Wörtern suche, die auch den Buchstaben l enthalten überall außer der dritten Position:

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

Der ^ innerhalb der eckigen Klammern [^l] bedeutet nicht diese Buchstabenliste, also nicht der Buchstabe l . Das bringt meine Liste möglicher Wörter auf 61, von denen nicht alle den Buchstaben l enthalten , die ich mit einem weiteren grep eliminieren kann Suche:

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

Einige dieser Wörter können die Buchstaben m enthalten und y , die nicht im heutigen Mysterium sind. Ich kann diese mit einem weiteren invertierten grep aus meiner Vermutungsliste entfernen Suche:

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

Meine Liste möglicher Wörter ist jetzt sehr kurz, nur sieben Wörter!

$ cat myguess3
babul
bailo
bakal
bakli
banal
bauld
baulk

Ich wähle banal als wahrscheinliches Wort für meine nächste Vermutung, die zufällig richtig war.

Die Macht regulärer Ausdrücke

Die Linux-Befehlszeile bietet leistungsstarke Tools, die Sie bei der eigentlichen Arbeit unterstützen. Das grep und fgrep Befehle bieten große Flexibilität beim Durchsuchen von Wortlisten. Für ein wortbasiertes Ratespiel grep half dabei, eine Liste mit 15.000 möglichen Wörtern des Tages zu erstellen. Nachdem Sie erraten und gewusst haben, welche Buchstaben in dem mysteriösen Wort vorkamen und welche nicht, grep und fgrep half, die Optionen auf 1.200 Wörter und dann nur noch sieben Wörter einzugrenzen. Das ist die Stärke der Befehlszeile.


Linux
  1. So verwenden Sie den Linux-Grep-Befehl

  2. Eine Einführung in die Verwendung von tcpdump auf der Linux-Befehlszeile

  3. Verwenden der Kraft in der Linux-Befehlszeile

  4. Haben Sie eine Kuh an der Linux-Befehlszeile

  5. Boxen Sie sich auf der Linux-Befehlszeile ein

Verwenden von more zum Anzeigen von Textdateien in der Linux-Befehlszeile

Lösen Sie ein Rätsel auf der Linux-Befehlszeile mit Nudoku

Verwenden von less zum Anzeigen von Textdateien in der Linux-Befehlszeile

Verwenden des GREP-Befehls unter Linux mit Beispielen

Meistern Sie die Linux-Befehlszeile

Verwendung des grep-Befehls unter Linux