Wordle kaj `ripgrep`

Read in English here: 🇨🇦 🇺🇸

Ŭerdl

Mi lastatempe decidis ludi "vortjon", denove konsumiĝinte min per furoro post la sensacio jam pasis. 👾🎉

⬜ ⬜ 🟨 ⬜ 🟩
⬜ 🟩 🟨 ⬜ 🟩
⬜ 🟩 ⬜ 🟩 🟩
⬜ 🟩 🟩 🟩 🟩
⬜ ⬜ ⬜ ⬜ 🟩
⬜ ⬜ ⬜ 🟨 🟩
🟩 🟩 🟩 🟩 🟩

Kompreneble, mi decidis ludi la Esperantan version. Tiuj-ĉi multas; ekz.1, Vortjo, Wordleo, Vortlo, ktp2. Mi ne nomos tiun, kiun mi ludis, por ke vi povos mem ilin ĉiujn peni (ankaŭ ĉar mi ne volas malrozigi ĝin laŭ viaj okuloj, kiam mi kunhavos mian frustron kun vi pri la specifa ludo poste).

Kiel miaj pli ruzaj/pigraj amikoj ludis ĝin, tiel mi dediĉis ludi. Anstataŭ rimedo por plibonigi scion mian de la lingvo, serĉis mi plej facilan manieron por trovi la vorton ĝustan. Rapide.

Eniras Linukso

Se nur havata ilo estas martelo, ĉiu problemo estas kvazaŭ najlo.

📌🔨

Ĉiuj, kiujn mi konas alproksimiĝas al la ludo malsame, sed ankoraŭ (siapunkte) familiare same. Dum tiajn problemojn solvas matematikistoj (per matematiko), mi, programisto, Linuksajn ilojn uzas. 🐧

Trompi Ŭerdlon per Linukso

Entrepreni trompi tiajn vort-ludojn per komputilo komence havendas vortaron tekstdosieran! 📖📚 Malbedaŭrinde, ekzakte tion havas mi de alia projekto, kiun mi kreas.

Do, la nur cetera endaĵo estas malfermi Linuksan terminalon3:

Mia vortaro konsistas el json dosiero kun vortradiko kaj ties angla-traduko:

cat *
  ...
    "vol": "want",
    "volv": "roll",
    "vom": "vomit",
    "zorg": "care",
    "zum": "buzz/hum"
}

Eniras bat kaj awk

Por forigi la tradukoj, kaj nur kontroli la vortradikojn, awk uzeblas. Tiu komando estas por printi la unuan kolumnon. (Jes, awk unu-indeksas, malkiel la plej multo da programlingvoj)

cat * | awk '{ print $1 }'
  ...
"vol":
"volv":
"vom":
"zorg":
"zum":
}

Unua Diveno:

Sed nur dezirindas vortojn ĝuste longajn; do 5 literoj, kaj aldonu 3 por la " kaj ": ĉirkaŭaj partoj, kaj minus 1 ĉar vortaro mia mankas lastan literon de ĉiu vort'.

cat * | awk '{ print $1 }' | awk 'length==3+5-1'
  ...
"vend":
"venĝ":
"venk":
"verŝ":
"volv":
"zorg":

Do, jen temp' por hazarde diveni:

B
I
E
R
O

Malaĉe! Tamen, estas lima nombro da eblooj por fina litero, kaj O eble plej oftas. Do nun, ni ne volas vidi vortojn kun certaj literoj, sed samtempe certaj literoj videndas.

Dua diveno:

Eniras grep

(rip)grep kapabligas onin serĉi tekston per pli pova maniero ol Ctrl+F. Por serĉi stringon, nur endas aldoni ĝin post la komando. Por malinkluzivi literojn, uzu rg -v / grep -v.

cat * | awk '{ print $1 }' | awk 'length==3+5-1' | rg -v '[bir]' | rg 'e'
  ...
"temp":
"tend":
"vejn":
"vesp":
"veŝt":

La [ kaj ] signifas ke tiuj literoj inter ili apartenas de aro, ne de stringo. Do rg -v [bir] ignoras ĉiun linion, kiu havas la literojn b, i, aŭ r laŭ ajna ordo.

Alimane, rg -v 'bir' serĉas tiun ekzaktan stringon, kaj nur forigas vortojn kiel birdo, barbiro, kaj Birmo. Do la [bir] parto ekzakte samas se skribota kiel [rib][irb].

B
I
E
R
O
M
E
N
U
O

Ĝuste poziciis literon kaj flavigis alian!

Nun, serĉindas vortoj kun kaj la litero E, kaj la litero N, sed tio ne tiel simplas kiel malinkluzivi pliajn literojn.

Tria Diveno:

La [] notacio ne plu taŭgas. Estas volataj vortoj kun kajaj, ne aŭaj literoj E & N, do ni devas aldoni alian grep-komandon por certigi ke la divenoj havos n-n.

cat * | awk '{ print $1 }' | awk 'length==3+5-1' | rg -v '[birmu]' | rg 'e' | rg 'n'
  ...
"sven":
"tent":
"vend":
"venĝ":
"venk":

Se oni volas hazardi elekti de la printita listo, nur aldonu | shuf | head -n 1 por hazarde ordigi la vortoj, kaj elekti la unua.

B
I
E
R
O
M
E
N
U
O
L
E
O
N
O

La tabulo pli kaj pli verdiĝas. 😊

Uzante nur grep:

Anstataŭ cat | awk, eblas serĉi nure per grep. Defaŭlte ripgrep4 serĉus ĉiujn tekstdosierojn en la nuna dosierujo (sen dosiera argumento), do la cat * parto estas pritraktita.

Sed kiel serĉi nur la radikoj, kaj ne ties difinojn? En la json supre, videblas ke ĉirkaŭ la vortradikoj estas malsaman paternon ol ĉirkaŭ la definoj, ĉar ili estas ŝlosiloj (do estas : post la fina "). Do, paterno serĉinda estas stringoj da 4 literoj inter " kaj kun ":.

En regex-lingvo5 . kongruas iun ajn literojn, kaj la {4}-parto, signifas ke la antaŭa paterno aperu kvarfoje. Do, normallingve, ".{4}": indikas serĉi la paternon: "▫▫▫▫":, (kun kiujn ajn literojn meze).

rg -Io '".{4}":' | rg -v '[birmulo]' | rg 'e' | rg 'n'
  ...
"scen":
"senc":
"sens":
"tend":
"vejn":

Nun ne-grepaj komandoj foras, kaj la komando malpli longas, sed ankoraŭ estas tro da grepoj.

Kvara Diveno: Preskaŭ Gajnonta!

Kun pli da informo pri la loko de iuj literoj, jam temp' estu pli inteligenta pri ĝia uzado (kaj ankaŭ mallongigi la komandon).

{4} signifas kvarfoja ripetado, do ".{4}": samas kiel "....":. Sciante tion, anstataŭ kongrui iun ajn literon, oni povas ŝanĝi . al specifa litero por kongrui tiun literon.

La grep komando klare spegulas la ludon, nun ke ni pozicias literojn tiel:

rg -Io '".e.n":' | rg -v '[birmulo]'
"vejn":

Do, bonege! Nur unu rezulton eligas tiu-ĉi komando pro tiu plia ordinformo. Mi nepre ĵus malkovris la ĝustan vorton! 🎉

B
I
E
R
O
M
E
N
U
O
L
E
O
N
O
V
E
J
N
O

Kvina Diveno: La RezervPlano

Nu hmm... Vortaro mia mankas ĉi-tiun vorton. 😞

Tamen esperiĝu kara; restas la ruz' de uzu divenon kun neniuj konataj literoj. Do, ni nur volas vidi vortoj komponitaj de ne jam kontrolitaj literoj por kontroli tiom da ili laŭeble.

rg -Io '"[^birmulone]{4}":'
  ...
"stat":
"ŝtat":
"takt":
"task":
"vaks":

Regeksaj novaĵoj: La ^ signifas ke ne volas neniujn literojn de la aro. Ĉi-tio malsamas al rg -v ĉar la " + ": partoj volatas, nur tiuj specifaj literoj enaraj maldeziratas.

B
I
E
R
O
M
E
N
U
O
L
E
O
N
O
V
E
J
N
O
Ŝ
T
A
T
O

Do forigis iujn literojn, inkluzive de la lasta vaŭlo, sed ne trovis la mankantan literon!

Sesa Diveno:

Kiuj aliaj vortoj mankas de mia vortaro?

Mi daŭros samplane kiel antaŭe, ne tro da vortoj eĉ restu sen ĉi-tiuj literoj.

rg -Io '"[^birmuloneŝt]{4}":'
  ...
"saŭc":
"spac":
"vaks":
"fajf":
"paŭz":
B
I
E
R
O
M
E
N
U
O
L
E
O
N
O
V
E
J
N
O
Ŝ
T
A
T
O
V
A
K
S
O

🤔🤔 Do la mankinta litero estas S?

Per la algoritmo supra, tiu-ĉi vorto devus jam troviti...

Sepa Diveno:

S
E
J
N
O

Finfinfine! Do plano B sukcesis, sed DuoLingo neniam intruis tiun-ĉi vorton al mi! 🦉

Kio estas Sejno?

Laŭ Vikipedio6:

Sejno estas ia rivero, ie en Francujo, kiun figuras ĉi-tiu fama pentraĵo:

Jen ludo kiu ludis min. Oni laŭdas ĝin por ĝi lingvistika praktiko, sed kaŝkaŝe estas ĝi tuttempe geografio-ludo! 🌎🌍🌏

La Ververa Sejno:

Post plia enketado, mi trovis alian definon; Vikipedio denove savis nin!

"Sejno estas tipo de reto por kapti fiŝojn en rivero."

Nu, 😅 ĝi verŝajne estas vera vorto.

Dankon por legi kara, kaj esperas mi ke lernis vi iom aŭ pri komand-liniaj programoj, aŭ pri Esperanto.



1

ekzistas; ne ekzemple ĉi-kaze. :^)

2

kaj tiaj programoj; ne kaj tiel plu ĉi-kaze c:

3

Mi uzas ripgrep (rg) anstataŭ la klasikaj grep kaj bat ĉar.. nu, ili verkitas per rust, kaj estas pli modernaj. Ankoraŭ atendante anstataŭigon por awk...

5

Bona rimedo/retejo por lerni, kontroli, kaj praktiki _regeks_ojn estas regexr.com.

4

Absolute, unu el la avantaĝo de ĝi super normala grep. Komando rg foo samas kiel grep foo -R ., sed per 7 alklakoj mallongas.

6

Kial ne Ŭikipedio?