# Is this puzzle solvable? Choose 6 five-letter words to get maximum score

I'm trying to avoid any disrespectful self promotion. However, a friend came up with a neat daily 5 letter word game (similar to Wordle and that style of game), I helped him code it into a playable web game.

The maximum score in the game is 25 points. You must provide 6 five letter words and each word locks a letter position of the word below it. Locked letters cannot be reused. Each unique letter is worth 1 point, the assigned letter (the letter locked from the previous word) is worth zero. The problem is that neither of us believe a perfect score is possible, even if you get to choose the letter locking spots, and the starting letter.

Given the less restrictive rules of choosing your own locked letter, can a perfect score be achieved with common language words?

Example Game: Bold letters are "locked" from word above.

A F T E R
C H O I R
S L A I N
M A V E N
P A V E S
B A G G Y

In this example game I've reused several letters, and the total unique letters (ABCEFGHILMNOPRSTVY) give me a score of 18. Is a perfect game possible?

• "Locked letters cannot be reused." - What exactly does this mean? Does it mean that I cannot use an F ever after the initial word "AFTER"? Commented May 27 at 12:47
• How is 25 (the best possible score) achieved if each guess is a maximum of 4 points? 6 x 4 = 24 Commented May 27 at 12:49
• @LeppyR64 for here the locked letters bit doesn't matter as to get maximum score you have to use a new letter everytime. 25 is max as the first guess is 5 new letters, and then each guess after gives 4 new letters Commented May 27 at 12:52
• Can you clarify what "common language" dictionary you'd accept? This would help people who write programs for computer-assisted search, and prevent arguments over whether any given word is common enough. Commented May 27 at 14:59
• I believe the confusion stems from the fact that the first word has a locked letter - if every word has a locked letter that doesn't score, then 24 points is optimal, although 25 distinct letters are possible (as shown). Commented May 27 at 15:37

 JUNKS
|
FOXES
|
WAVED
|
MARCH
|
GLYPH
|
BLITZ


• Very nice, +1 all common english words with nothing super obscure too Commented May 27 at 16:38
• Very impressive! I am surprised Q was the letter left out! Thanks for proving it is possible. Commented May 27 at 18:52
• I started the problem under the impression that vowels would be hard to come by, and so Q felt like the logical letter to ignore for a common-word solution. Only later would I realize that locking vowels would make that less of an issue. Commented May 27 at 23:05
• @BeastlyGerbil Note that junk as in trash is only a noun and has no plural of junks, so this is junk as a type of boat with plural junks. Blitz is a German word, used in English only in some very specific context like Blitzkrieg. Commented May 28 at 9:21
• @quarague Junk is also a verb meaning to toss aside or get rid of (derived from the noun referring to trash), and while blitz is a German loan word, it has an array of other uses outside of the Blitz (e.g., when you blitz something in a food processor or blitz a player on the other team). Both are perfectly normal, everyday words. Commented May 28 at 11:20

Here's one that omits only X, obtained via integer linear programming:

BROWN
|
FRITZ
|
GLIDE
|
SHAVE
|
QUACK
|
JUMPY


For the 2315 common words from the list provided in What is the longest Wordle game?, the possible choices for the omitted letter turn out to be B, F, J, M, Q, S, V, X, and Z. The other choices for the omitted letters each yield a maximum of 24.

By request, here is SAS code:

proc optmodel;
/* declare parameters and read data */
set <str> WORDS;
set LETTERS = setof {k in 65..65+26-1} byte(k);
num numPositions = 5;
set POSITIONS = 1..numPositions;
set <str> WORDS_l_p {LETTERS, POSITIONS} init {};
str letterThis;
for {w in WORDS} do;
for {p in 1..length(w)} do;
letterThis = char(w,p);
WORDS_l_p[letterThis,p] = WORDS_l_p[letterThis,p] union {w};
end;
end;
num numSteps = 6;
set STEPS = 1..numSteps;

/* declare variables */
var AssignWord {WORDS, STEPS} binary;
var AssignLetter {LETTERS, STEPS, POSITIONS} binary;
var UseLetter {LETTERS} binary;
var IsLocked {LETTERS, STEPS diff {1}, POSITIONS} binary;

/* declare objective */
max NumUsedLetters = sum {l in LETTERS} UseLetter[l];

/* declare constraints */
con OneWordPerStep {s in STEPS}:
sum {w in WORDS} AssignWord[w,s] = 1;
con WordImpliesLetter {l in LETTERS, s in STEPS, p in POSITIONS}:
sum {w in WORDS_l_p[l,p]} AssignWord[w,s] = AssignLetter[l,s,p];
con UseLetterImpliesAssignLetter {l in LETTERS}:
UseLetter[l] <= sum {s in STEPS, p in POSITIONS} AssignLetter[l,s,p];
con OneLockedPerStep {s in STEPS diff {1}}:
sum {l in LETTERS, p in POSITIONS} IsLocked[l,s,p] = 1;
con LockedThis {l in LETTERS, s in STEPS diff {1}, p in POSITIONS}:
IsLocked[l,s,p] <= AssignLetter[l,s,p];
con LockedPrevious {l in LETTERS, s in STEPS diff {1}, p in POSITIONS}:
IsLocked[l,s,p] <= AssignLetter[l,s-1,p];
con LockedLater {l in LETTERS, s in STEPS diff {1}, p in POSITIONS, s2 in s+1..numSteps}:
IsLocked[l,s,p] <= 1 - sum {p2 in POSITIONS} AssignLetter[l,s2,p2];

/* call MILP solver */
solve;

/* report solution */
str sol {STEPS, POSITIONS};
str locked {STEPS, POSITIONS};
for {s in STEPS} do;
for {w in WORDS: AssignWord[w,s].sol > 0.5} do;
for {p in 1..length(w)} sol[s,p] = char(w,p);
leave;
end;
if s = 1 then continue;
for {l in LETTERS, p in POSITIONS: IsLocked[l,s,p].sol > 0.5} do;
locked[s,p] = l;
leave;
end;
end;
print sol;
print locked;
put ({l in LETTERS: UseLetter[l].sol < 0.5});
quit;


Here's one that omits X and satisfies the additional requirements from @smci:

JUMPY
|
QUICK
|
BLITZ
|
|
SHOVE
|
FROWN


• I think your "I solved this via integer linear programming" answers would be better if you also copied-and-pasted in the code that solves them. (Unless it's thousands of lines of boilerplate or something.) There would be more for interested others to learn from. Without that, it doesn't really say that much more than "obtained via thinking really hard" would. Commented May 27 at 19:55
• @GarethMcCaughan I added the code to my answer. Commented May 27 at 21:47
• Nice! Thank you. Commented May 28 at 23:43
• Whoa! SAS code!
– smci
Commented May 30 at 4:04

This is another answer without using Z. I used wildcard search with an online dictionary to search for words semi-manually but it was still very hard for me. I found multiple 24 points solution before I found this solution after many hours. I tried to exclude special terms or uncommon words. Unsure, how common the first two words are (which I didn't know myself).

FOXED
JIVES
WIMPY
RUGBY
QUANT
CHALK

• I think the first two words are common enough (the first usually preceded by "out-"). The only word I find to be somewhat rare is your fifth. But you gotta get that Q in there somehow... Commented May 28 at 4:33
• I think a Quant is a slang for a Financial Quantitative Analysis. It's an obscure enough of a job itself that it is almost an industry specific slang. Commented May 28 at 6:21
• "Quant Rating" is used on several stock trading sites. Commented May 28 at 14:01
• I found "quant" in the dictionary and it looked like quantum or quanta but I didn't know it's a financial job term. Cambridge Dictionary entry Dang. Commented May 29 at 10:46