Imperversa da diverse settimane e ci sono cascato anch’io di recente. Parlo di Wordle, il gioco inventato dall’ingegnere del software Josh Wardle e lanciato per i propri genitori e qualche amico lo scorso ottobre. In poco tempo il gioco ha catturato l’attenzione di un vasto pubblico, come si può facilmente verificare con una veloce ricerca su Google del termine Wordle.
Ma quello che ha ancor più acceso l’interesse per il gioco è l’acquisto di Wordle da parte del New York Times, per an undisclosed price in the low-seven figures. Per quello che capisco di inglese, si tratta di qualche milione di dollari.
Come si gioca? La schermata iniziale sul sito spiega tutto.
In sintesi: ogni giorno c’è da scoprire una nuova parola inglese di 5 lettere, con 6 tentativi a disposizione. A ogni tentativo con una parola riconosciuta dal vocabolario del gioco, le lettere indovinate in posizione si colorano di verde sia sullo schema di gioco che sulla tastiera. Quelle indovinate, ma non in posizione, si colorano di giallo. Quelle che, invece, non compaiono nella parola da cercare, diventano nere.
Tentativo dopo tentativo, quindi, sulla tastiera rimangono in grigio solo le lettere ancora da provare.
Dopo qualche mano di gioco risulta chiaro che occorre un’efficace strategia di apertura di Wordle: con quale parola iniziare?
Ho trovato numerosi articoli sul tema, con suggerimenti vari. Armato di codice e Mac, provo a dire anch’io la mia.
Il primo approccio
Sfogliando un po’ di articoli, uno dei suggerimenti più diffusi è quello di cominciare con la parola ADIEU, che contiene 4 delle possibili 6 vocali utilizzate nell’alfabeto inglese. Rimangono fuori la O e la Y. Per le prime partite, anch’io ho iniziato così.
Al secondo tentativo, poi, ho scelto parole con lettere tutte diverse, possibilmente con alta frequenza nell’alfabeto inglese. Oggi 8 febbraio, ad esempio, comincio così:Ora bisogna scegliere una terza parola. Ne andrebbe bene una con la Y, e poi con qualche consonante ancora in grigio. E magari con una A in posizione diversa, giusto per cominciare a dissipare la nebbia.
Bene, la M è al posto giusto, poi ci sono A, E ed R da sistemare, più un’ulteriore lettera da scegliere tra quelle in grigio sulla tastiera.
La A la sistemerei in terza posizione, visto che non è né in prima né in seconda. La M la lascerei in quarta, la E in fondo: **AME.
C’è ancora da sistemare la R e da trovare la quinta lettera. Si può provare con FR, GR, KR, BR. Proviamone una per verificare se l’ipotesi AME è corretta e poi raffiniamo:Bene, la parola era FRAME e ci sono voluti 5 tentativi. Potevano essere 4, con un po’ più di fortuna, ma si poteva anche non riuscire nei 6 consentiti. Bene così.
Uno sguardo a come è disegnato il gioco
Guardando il sorgente della pagina web si intuisce subito che la realizzazione è stata pensata proprio per un pubblico limitato e amico. La logica è realizzata tutta nel browser, in javascript, cosa che limita e semplifica al massimo l’interazione con il server, ma che rivela anche tutto del gioco a chi dia uno sguardo. In particolare, nel javascript sono ben in vista due dizionari, rispettivamente di 2.315 e 10.657 parole inglesi, ciascuna di 5 lettere. È probabile che, ora che il gioco entra nella ricca sezione dei giochi del NYT, ci sia una ragionevole re-implementazione del gioco.
Altra caratteristica: non è necessaria nessuna registrazione, i risultati sono conservati in cookie lato browser. Quindi si può barare alla grande: faccio un po’ di tentativi in una finestra anonima o in un browser di riserva (es. Chrome) e poi, in quello ufficiale (es.: Safari), risolvo brillantemente in un solo tentativo.
Wordle: con quale parola iniziare? Uno sguardo alle frequenze
Un strategia di gioco efficace potrebbe essere quella di spendere i primi 2-3 tentativi per massimizzare il numero di lettere indovinate e i restanti tentativi per sistemare le lettere al posto giusto.
Come scegliere le 10 o 15 lettere migliori, tra le 26 dell’alfabeto inglese? Può venirci in aiuto l’analisi delle frequenze con cui le lettere compaiono in media in testi inglesi. Tra le varie tabelle disponibili, ne ho scelto una, dal sito del Dipartimento di Matematica della Cornell University:
Analizzando con un foglio di calcolo, si vede che le 10 lettere più frequenti coprono il 73,72% dell’utilizzo, mentre le 15 lettere più utilizzate coprono l’88,20%.
Ci si potrebbe allora chiedere:
quali 3 parole da 5 lettere ciascuna e accettate da Wordle contengono, nel loro insieme, le 15 lettere più frequenti nell’utilizzo della lingua inglese (secondo la Cornell-U)?
Serve un po’ di Python.
Il codice
Cominciamo dalla base dati. Ho scelto quella più piccola, da 2.315 parole, che ho copiato integralmente, nome, parentesi e virgole comprese, nel codice Python.
LA = ["cigar", "rebut", ...
Segue poi la sequenza delle 15 lettere da considerare, con la relativa frequenza. Due osservazioni:
- ho sostituito la F con la Y, riducendo un po’ la copertura (dall’88,20% all’88,01%), con il vantaggio di avere tutte e 6 le vocali dentro le prime tre parole;
- per lavorare con interi, ho traslato le percentuali all’intero ottenuto includendo le prime due cifre dopo la virgola ed eliminando la virgola stessa (quindi 88,01% diventa 8801).
freq = ['a','c','d','e','y','h','i','l','m','n','o','r','s','t','u']
p_freq = [812, 271, 432, 1202, 211, 592, 731, 398, 261, 695, 768, 602, 628, 910, 288]
print (freq)
print (p_freq, '\n')
La lista dei candidati
Dal dizionario di 2.315 parole estraggo i possibili candidati da utilizzare, cioè quelle parole che contengono lettere della lista freq, ciascuna una volta sola. Il codice è molto semplice:
- una parola per volta, si selezionano le parole senza lettere doppie,
- che contengono solo lettere dalla lista freq;
- la parola così ottenuta si inserisce nella lista S e il suo peso, come somma delle frequenze delle singole lettere, nella lista ValS.
S = []
ValS = []
for i in LA:
j = ''.join(set(i))
if len(i) != len(j):
continue
np = False
for c in i:
if c not in freq:
np = True
break
if np == False:
S.append(i)
v = 0
for k in range(0,len(i)):
v += p_freq[freq.index(i[k])]
ValS.append(v)
print (i,v)
print ('Accettate {} parole (pesi {})'.format(len(S),len(ValS)))
Dalla prima selezione rimangono 483 delle 2.315 parole del dizionario.
L’individuazione delle triple
Ora si devono isolare le possibili triple di parole che contengono tutte e 15 le lettere desiderate. Il codice è anche qui abbastanza semplice, con tre cicli nidificati per selezionare le triple che rispondono al requisito.
n_triple = 0
for i in S:
ii = S.index(i) + 1
for j in S[ii:]:
jj = S.index(j) + 1
for k in S[jj:]:
u = i + j + k
m = ''.join(set(u))
if len(u) == len(m):
vi = ValS[S.index(i)]
vj = ValS[S.index(j)]
vk = ValS[S.index(k)]
print ('{} {} {} {} {} {} - {} {} '.format(i, vi, j,
vj, k,vk, max(vi,vj,vk), vi+vj+vk-min(vi,vj,vk)))
n_triple += 1
print ('trovate {} triple'.format(n_triple))
Vengono individuate 449 triple, di cui stampo: ciascuna parola con il proprio peso, poi il massimo dei tre pesi e infine la somma dei pesi delle due parole più pesanti. Ecco l’inizio della stampa:
model 3061 hasty 3153 incur 2587 - 3153 6214
model 3061 rusty 2639 china 3101 - 3101 6162
model 3061 rusty 2639 chain 3101 - 3101 6162
La prima riga, ad esempio, si legge: della tripla model / hasty / incur, giocherei prima hasty (31,53%), poi model (arrivando al 62,14%), infine incur (completando l’88,01% comune a tutte le triple trovate).
L’ultimo passo
Rimane ora da scegliere la tripla migliore. Con qual criterio?
Tutte le triple coprono lo stesso peso dell’88,01%, ma c’è una differenza sul come arrivano a questa somma. Un criterio di scelta può essere quello di scegliere tra le triple che massimizzano la copertura con due parole quella che massimizza la copertura con la prima parola.
Importato le 449 triple in excel, un semplice ordinamento dà questa classifica:
Le due prime triple sono equivalenti, scelgo la prima perché più mnemonica: those (41%) admin (29,31%) curly (17,70%), raggiungendo il 41% di copertura con la prima parola, il 70,31% con le prime due e l’88,01% con tutte e tre.
Mi aspetto di trovare in media due lettere con il primo tentativo, 3-4 con i primi due, 4-5 dopo la terza parola. Quindi deciderò strada facendo se dopo la prima provare anche la seconda e se poi proseguire con al terza.
Ora non resta che provare.
E in confronto alla strategia ADIEU ?
Nel primo approccio visto, sono state provate nell’ordine le parole ADIEU, STROW, CALMY, con copertura del 34,65% dopo la prima paroila, del 65,82% dopo la seconda, per finire con il 77,23% (la A di CALMY è già stata contata in ADIEU).
Wordle, con quale parola iniziare, martedì 8 febbraio
Mettiamo alla prova la strategia scelta. Dopo aver inserito le 3 parole la situazione è questa:Siamo a 4 lettere indovinate, una anche nella posizione giusta. La M e la R devono essere in prima, seconda o quarta posizione. Escluderei la prima per entrambe, non saprei come sistemare la A e la lettera ancora da trovare, quindi metto la R in seconda e la M in quarta e provo la B, inserisco BRAME:
Ancora un passo ed è fatta, ma la strategia non ci ha portato molto più lontano del primo approccio. Riproviamo domani.
Wordle, con quale parola iniziare, mercoledì 9 febbraio
Eccoci a mercoledì, nuova sfida che affronto con la solita strategia: THOSE, seguito da ADMIN, per proseguire poi, a meno che non sia già arrivato a scoprire 4 o 5 lettere, con CURLY. Situazione dopo i tre tentativi:
Prese tutte e 5 le lettere! La nostra parola è quindi: *UM**, dove al posto dei tre asterischi dobbiamo sistemare H, O, R.
Cominciamo dalla H, che potrebbe aprire la parola, più difficilmente chiuderla o, peggio ancora, essere subito dopo la M.
Quindi: HUM**, con O e R da sistemare. Direi HUMOR:
Perfetto! Risolto con 4 tentativi, il che, per la mia limitata esperienza, è un buonissimo risultato. Vediamo domattina come va.
Wordle, con quale parola iniziare, giovedì 11 febbraio
Eccoci a giovedì. Solito indirizzo, solito inizio:
Dopo una partenza fulminea con due lettere indovinate al posto giusto, alla terza siamo a 4 lettere. Quindi ne manca ancora una, da scegliere tra le lettere in grigio sulla tastiera.
In terza posizione, prima della S, non mi sembra che ci stia una delle consonanti rimaste, quindi c’è la A o la U.
Mi sembra plausibile una cosa come *AUSE, quindi provo PAUSE:
Giusto! Anche oggi risolto in 4 tentativi.
Conosco poco l’inglese, per selezionare le parole da inserire mi appoggio molto a Google. Poi capita di utilizzare parole come BRAME, che credo risultino desuete per gli anglofoni di oggi. Ecco come la presenta il dizionario online Collins: una parola ottocentesca, si direbbe.
Mi chiamo Pasquale Petrosino, radici campane, da alcuni anni sulle rive del lago di Lecco, dopo aver lungamente vissuto a Ivrea.
Ho attraversato 40 anni di tecnologia informatica, da quando progettavo hardware maneggiando i primi microprocessori, la memoria si misurava in kByte, e Ethernet era una novità fresca fresca, fino alla comparsa ed esplosione di Internet.
Tre passioni: la Tecnologia, la Matematica per diletto e le mie tre donne: la piccola Luna, Orsella e Valentina.
Potete contattarmi scrivendo a: p.petrosino@inchiostrovirtuale.it