Jelly, 20 bytes, score 53 57
“¦/œḌ⁼ƥ~ẹµḲ5&Ċd@ṡ»ḲY
Try it online!
Wordsearch:
a d m i s s i o n
h o u s e h o l d
s o m e t h i n g
g e n e r a l l y
p o t e n t i a l
t h e r e f o r e
Words:
admission generally household potential something therefore
general mission
house stair there thing
ally gene here hill hold miss some tent thin
air all due era for hat her ill oil old one pot see set son ten the use
ad ah at do go he hi ie in me ms oh on or so to us
i
Previous
...the dictionary referenced in the question has changed since this was posted so this would drop to a score of 33.
Jelly, 23 bytes, score 150 154 158 160
“RʂȥḄ0ḣq⁾÷yḊzIḥẊḥYx »ḲY
Try it online!
Used Python to search for boards; there are, no doubt, higher scores possible though.
The board:
donations
beverages
placement
performed
metallica
thousands
The words:
['a', 'ac', 'ace', 'ae', 'ag', 'age', 'ages', 'al', 'all', 'am', 'an', 'and', 'ar', 'art', 'as', 'at', 'ati', 'au', 'b', 'be', 'beverage', 'beverages', 'bp', 'c', 'ca', 'cd', 'ce', 'cement', 'cf', 'd', 'da', 'das', 'db', 'do', 'don', 'donation', 'donations', 'ds', 'e', 'ec', 'ed', 'ee', 'eh', 'el', 'em', 'en', 'ent', 'er', 'era', 'es', 'et', 'ev', 'eve', 'ever', 'f', 'fa', 'fo', 'for', 'form', 'formed', 'g', 'ge', 'gem', 'h', 'ho', 'i', 'ia', 'ic', 'in', 'io', 'ion', 'l', 'la', 'lace', 'le', 'lee', 'li', 'll', 'ls', 'm', 'me', 'med', 'men', 'ment', 'met', 'meta', 'metal', 'metallic', 'metallica', 'mi', 'min', 'mr', 'mt', 'n', 'na','nat', 'nation', 'nations', 'nd', 'ne', 'nec', 'ns', 'nt', 'nv', 'o', 'oe', 'og', 'ol', 'on', 'ons', 'or', 'ou', 'p', 'pe', 'per', 'perform', 'performed', 'pl', 'place', 'placement', 'pm', 'pp', 'ppm', 'r', 'ra', 'rage', 're', 'rf', 'rl', 'rm', 'rt', 's', 'sa', 'san', 'sand', 'ss', 'st', 'std', 't', 'ta', 'tall', 'td', 'th', 'thou', 'thousand', 'thousands', 'ti', 'tion', 'tions', 'to', 'tr', 'treo', 'u', 'us', 'usa', 'v', 'va', 'var', 've', 'ver']
The search
Note LIMIT_TO_N_BEST_NINES
limits the search - lower numbers try fewer boards by never using the lower scoring rows (nine letter words) which will find "good" scores quicker, while higher numbers (up to 909 - the number of 9 letter words in the dictionary) will search more boards (and likely never complete!).
f = open(filePath, 'r')
ws = set(w.replace('\n', '').lower() for w in f.readlines())
def iterSubWords(w, ws):
for l in range(1,len(w)+1):
for s in range(len(w)-l+1):
if w[s:s+l] in ws: yield w[s:s+l]
nines = sorted([w for w in ws if len(w) == 9], key=lambda w:len(tuple(iterSubWords(w, ws))), reverse=1)
def diags(rows):
for rs in range(len(rows)):
yield ''.join(rows[rs + x][x] for x in range(min(len(rows) - rs, len(rows[0]))))
for cs in range(1, len(rows[0])):
yield ''.join(rows[x][cs + x] for x in range(min(len(rows[0]) - cs, len(rows))))
def diagWords(rows, validWords):
for d in diags(rows):
for sw in iterSubWords(d, validWords): yield sw
def allWordsOnBoard(rows, validWords):
r = set()
for row in list(rows) + [''.join(col) for col in zip(*rows)]:
for validWord in iterSubWords(row, validWords): r.add(validWord)
for validWord in diagWords(rows, validWords): r.add(validWord)
return r
from itertools import combinations, permutations
LIMIT_TO_N_BEST_NINES = 107
m = 0
for wl in combinations(nines[:LIMIT_TO_N_BEST_NINES], 6):
fws = allWordsOnBoard(wl, ws)
if len(fws) > m:
for p in permutations(wl):
fws = allWordsOnBoard(p, ws)
if len(fws) > m:
m = len(fws)
print(m, p)