I don't have a dictionary to test with, but another approach is to
count the number of letters in each dictionary word, and then keep
only the dictionary words that can be made from the letters given.  This
would be something like:

alphabet =: 'abcdefghijklmnopqrstuvwxyz'
lettfreq =: alphabet&(+/@:="0 1)@>
cullwb =: (<'letterbrei') (*./@:>:"1&:lettfreq # ]) wb

the list of qualified words is in cullwb, and you can sort that as you like.

This feels like it might be more economical especially for large 
starting words.

Henry Rich


Aai wrote:
> Fished up from the blogosphere:
>  
>>From a set of letters, say 'letterbrei', I want to produce a set of the
> longest possible words (checked against a reference list). Reading about
> symbol s: I decided to use this to make a lookup table of sorted words
> from the imported word list. Here's my interpretation:
> 
> 
> NB. word list
> wb =: 'b' fread <'/usr/share/dict/words'
> 
>    # wb
> 380645
> 
> 
> NB. build a symbol table from the word list
> wbs=: s: /:~&.> wb
> 
> NB. lookup function
> lu=: wb{ ~ [: I. wbs e. s:@<
> 
> NB. powerset function, e.g.
> ps=: (],,&.>)/@(a:,~,&.>)
> 
> Example of use:
> 
> NB.      desc. sort by length            unique subsets with minimum
> length 3
>    ts '6 {. ({~\:@:(#&.>)) ; lu &.> (#~[:;2&<@#&.>) ~. ps /:~
> ''letterbrei'''
> 8.977938 639296
> +--------+--------+--------+--------+--------+--------+
> |litterer|letterer|reletter|brittler|bitterer|terrible|
> +--------+--------+--------+--------+--------+--------+
> 
> 
> Question is are there alternatives I should know of?
> 
> 
> Thanks
> 
> =@@i
> 
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
> 
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to