Here are some found solutions, there should be all of them in the given word list.
# WORD1 WORD2 WORD3 UNUSED
-----------------------------------------
1 BRAZING + KVETCHY + MUDFLOW JPQSX
2 FLIGHTY + PROVEND + ZAMBUCK JQSWX
3 PERVING + TWYFOLD + ZAMBUCK HJQSX
4 PREVING + TWYFOLD + ZAMBUCK HJQSX
5 PROVEND + WIGHTLY + ZAMBUCK FJQSX
Five solutions only...
@Lukas Rotter Many thanks for pointing out the error in the previous version!
Used newly UPDATED py code:
ALL_LETTERS = set('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
words = []
with open('word.list') as stream:
for line in stream.readlines():
word = line.strip()
if len(word) == 7 and len(set(word)) == 7:
words.append(word.upper())
print(len(words))
vowels = set('AEIOUY')
dic = {} # vowels --> list of words involving these vowels
for word in words:
used_vowels = list(vowels.intersection(word.upper()))
used_vowels.sort()
used_vowels = ''.join(used_vowels)
if used_vowels not in dic:
dic[used_vowels] = []
dic[used_vowels].append(word)
keys = list(dic)
keys.sort()
solutions = []
for ae in keys:
for io in keys:
if io <= ae: continue
if set(ae).intersection(io): continue
for uy in keys:
if uy <= io: continue
if set(uy).intersection(ae + io): continue
# print(f"TRYING {ae} {io} {uy}")
for ae_word in dic[ae]:
for io_word in dic[io]:
if len(set(ae_word + io_word)) < 14: continue
for uy_word in dic[uy]:
letters = ae_word + io_word + uy_word
if len(set(letters)) < 21: continue
unused = list(ALL_LETTERS.difference(letters))
unused . sort()
if ( 'V' in letters
and ( set('HM').issubset(unused) or
set('QS').issubset(unused) ) ):
sol = [ae_word, io_word, uy_word]
sol.sort()
solutions.append((sol, ''.join(unused)))
solutions.sort()
for counter, (sol, unused) in enumerate(solutions):
ae_word, io_word, uy_word = sol
print(f' {counter + 1} {ae_word} + {io_word} + {uy_word} {unused}')
(The code was rearranged in the final check condition to be simpler to digest also for readers that have no or limited python experience.)