In [7]:
tiles = """
abl ace adj aer ara art ase ave ban bar bas ble
bri buk che cme cnt coo dct dep der des dge
dim dle ent ent erp etm ewe gai gre gri gts ham
hit hod hyp ifi ign ile inc ing ini ino inv itc
ker ket men mic nae nch nee nin non ome ore
pal ran rdi res roo rry sch sci she sys taa tau
tcr ted tem tep ter tst ust ver was wat
"""

In [4]:
import forge
from data import warehouse
from puzzle.puzzlepedia import prod_config
prod_config.init()

trie = warehouse.get('/words/unigram/trie')

In [5]:
import re
from data.seek_sets import chain_seek_set

In [89]:
def walk(seek_set, acc, targets, pos=0):
  if pos >= len(targets):
    yield ' '.join(acc)
    return
  target = targets[pos]
  seek_set.set_length(target)
  for result, weight in trie.walk(seek_set, exact_match=True):
    #if weight < 5e4:
    #  break
    acc.append(result)
    yield from walk(seek_set[result:], acc, targets, pos+1)
    acc.pop()

def process(tiles, targets):
  #print(tiles + ['a'])
  found = set()
  for c in 'abcdefghijklmnopqrstuvwxyz':
    seek_set = chain_seek_set.ChainSeekSet(inject(tiles, c), sum(targets))
    for result in walk(seek_set, [], targets):
      if result in found:
        continue
      print(result)
      found.add(result)

def inject(tiles, c):
  result = [c]
  for t in tiles:
    result.append(t)
    result.append(c + t[0] + t[1] + t[2])
    result.append(t[0] + c + t[1] + t[2])
    result.append(t[0] + t[1] + c + t[2])
  return result
      
def parse(s):
  parts = s.split(' ')
  result = []
  for p in parts:
    p = p.strip('’,;.‘^!-*')
    if p:
      result.append(int(p))
  return result

In [93]:
tiles = """
abl ace adj aer ara art ase ave ban bar bas ble
bri buk che cme cnt coo dct dep der des dge
dim dle ent ent erp etm ewe gai gre gri gts ham
hit hod hyp ifi ign ile inc ing ini ino inv itc
ker ket men mic nae nch nee nin non ome ore
pal ran rdi res roo rry sch sci she sys taa tau
tcr ted tem tep ter tst ust ver was wat
"""
tiles = """
			aer				ave			bas
						dct				
dim										
								ini		
	ket									
								she		
			tep					was		
"""
process(tiles.split(), [10, 6])


diminished basket
diminished wasted
diminished sheave
diminished basted
diminished cittie
diminished octave
diminished octavo
diminished pimpin
diminished pimppa
diminishes basket
diminishes wastes
diminishes insist
diminishes basins
diminishes insite
diminishes bassas
diminishes sheave
diminishes bassin

In [70]:
print("""
abl ace adj aer ara art ase ave ban bar bas ble
bri buk che cme cnt coo dct dep der des dge
dim dle ent ent erp etm ewe gai gre gri gts ham
hit hod hyp ifi ign ile inc ing ini ino inv itc
ker ket men mic nae nch nee nin non ome ore
pal ran rdi res roo rry sch sci she sys taa tau
tcr ted tem tep ter tst ust ver was wat
""".replace(' ', '\t'))


			aer				ave		bar	bas	ble
					coo	dct					
dim						ewe	gai		gri	gts	
								ini			itc
	ket			nae	nch		nin	non			
	ran	rdi	res					she	sys	taa	tau
tcr		tem	tep					was			


In [ ]: