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)
Comments are not for extended discussion; this conversation has been moved to chat.
– James – 2018-11-24T20:37:36.630Right, I hope those edits have covered everyones issues. Sorry if I missed anyone out. I'll put in a reopen request. – alan2here – 2018-11-25T11:51:44.483
The ptoblem with this challenge is that answers will just consist of printing the optimal wordsearch itself, rather than a program finding the wordsearch. What I'd recommend instead is having the submission take input as a list of words and returning a wordsearch within reasonable time complexity. You could turn it into a [tag:test-battery] question, where you have a series of test cases and see which submission produces the most compact wordsearchs. – Jo King – 2018-11-26T21:44:17.637
@King Test batteries in this case being several specific subsets of words from the original word list? – alan2here – 2018-11-28T10:58:23.427
Voting to reopen on the condition that you make it just one word search-- two is unnecessary. – lirtosiast – 2018-12-01T05:53:04.287
@lirtosiast Wouldn't a test batteries mean that there were in effect several word-searches? Also it's only 2 because it was suggested on the Meta post about this question. I'm inclined to agree but cannot do all thease contradictory things. Do you think that a totally optimal solution will be found and reposted by all, or looking up the answer etc… and not posting code is going to be an issue? Most compact to contain all the words will be impractically large. – alan2here – 2018-12-03T11:32:58.120