How I found a good opener for Wordle

mnlwldr

manuel

Posted on January 13, 2022

How I found a good opener for Wordle

Like some other people, I played Wordle the last days.

Today, I wrote a little tool to find out whats can be a good opener. Jotto is a similar game so it's easy to find a list of words like this https://www.easysurf.cc/list1.htm.

I downloaded and checked it against my helper tool. The code is not a beauty but it works (and I hope correctly)

package main

import (
    "bufio"
    "fmt"
    "os"
    "sort"
)

func main() {
    checkAgainstWordlist()
}

func checkAgainstWordlist() {
    lettercount := make(map[string]int)

    file, err := os.Open("Wordlist")
    if err != nil {
        panic("panic")
    }
    defer file.Close()

    scanner := bufio.NewScanner(file)
    for scanner.Scan() {

        for _, letter := range scanner.Text() {
            if val, ok := lettercount[rune2c(letter)]; ok {
                lettercount[rune2c(letter)] = val + 1
            } else {
                lettercount[rune2c(letter)] = 1
            }
        }
    }
    fmt.Println(rankByWordCount(lettercount))

    if err := scanner.Err(); err != nil {
        panic(err)
    }
}

func rune2c(r rune) string {
    return fmt.Sprintf("%c", r)
}

func rankByWordCount(wordFrequencies map[string]int) PairList {
    pl := make(PairList, len(wordFrequencies))
    i := 0
    for k, v := range wordFrequencies {
        pl[i] = Pair{k, v}
        i++
    }
    sort.Sort(sort.Reverse(pl))
    return pl
}

type Pair struct {
    Key   string
    Value int
}

type PairList []Pair

func (p PairList) Len() int {
    return len(p)
}

func (p PairList) Less(i, j int) bool {
    return p[i].Value < p[j].Value
}

func (p PairList) Swap(i, j int) {
    p[i], p[j] = p[j], p[i]
}

Enter fullscreen mode Exit fullscreen mode

The result was [{e 709} {a 679} {r 565} {t 499} {i 480} {o 457} {s 429} {l 428} {n 418} {c 352} {u 335} {h 302} {d 258} {p 240} {y 238} {m 222} {g 203} {b 185} {k 154} {w 137} {f 137} {v 99} {x 30} {q 26} {z 24} {j 19}]

(e = 709 times, a = 679 times, ...)

That means e,a,r,t, and i are the most used letters in the list. A word for this combination of letters can be "IRATE".
I checked this on Wordle and yeah, it's a accepted word :)

I checked this against the last 9 days and got following matches:

200: 3
201: 1
202: 0
203: 2
204: 2
205: 2
206: 2
207: 2
208: 2
Enter fullscreen mode Exit fullscreen mode

Now, the next letters are o,s,l,n, and c. A word for this combination of letters can be "CLONS". I checked this on Wordle and it's a accepted word too. I got following improvements against the last 9 days:

200: 3 => 3
201: 1 => 3
202: 0 => 2
203: 2 => 4
204: 2 => 3
205: 2 => 2
206: 2 => 3
207: 2 => 3
208: 2 => 2
Enter fullscreen mode Exit fullscreen mode

I wrote this really quickly, hope I haven't made many mistakes.

Update

I got the Wordlist from Wordle itself an run my code again.
The result are
[{s 6665} {e 6662} {a 5990} {o 4438} {r 4158} {i 3759} {l 3371} {t 3295} {n 2952} {u 2511} {d 2453} {y 2074} {c 2028} {p 2019} {m 1976} {h 1760} {g 1644} {b 1627} {k 1505} {f 1115} {w 1039} {v 694} {z 434} {j 291} {x 288} {q 112}]

That means a got opener is arose followed by until

What are your words to open the game?

💖 💪 🙅 🚩
mnlwldr
manuel

Posted on January 13, 2022

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related