Much better again. I had to clean up the word list first (contained
e.g.  umlaut chars), but here's a result:

'wb'  is now all lowercase containing only chars from
'abcdefghijklmnopqrstuvwxyz'''

   6 {. ({~\:@:(#&.>))(<'letterbrei') (*./@:>:"1&:lf # ]) wb
+--------+--------+--------+--------+--------+--------+
|bitterer|brittler|letterer|litterer|reletter|terrible|
+--------+--------+--------+--------+--------+--------+

   ts ...
1.182908 69187328


=@@i


Henry Rich schreef:
> Hm.  Lot of space.  You could reduce the space, I think, with
>
> cullwb =: (<'letterbrei') (*./@:>:&lettfreq # ]) wb
>
> I don't know if this would be faster or slower.
>
> Here is a better way to do letter counts (I think)
>
> lettfreq =: #/.~@(alphabet&,)@>
>
> Henry Rich
>
> Aai wrote:
>   
>> Nice speedup!
>>
>> using a 'lowered' word list gives:
>>
>>    6 {. ({~\:@:(#&.>)) (<'letterbrei') (*./@:>:"1&:lettfreq # ]) lowerwb
>> +--------+--------+--------+--------+--------+--------+
>> |bitterer|brittler|letterer|litterer|reletter|terrible|
>> +--------+--------+--------+--------+--------+--------+
>> 3.224783 69194368
>>
>> Or extending the alphabet with uppercases:
>>
>>    6 {. ({~\:@:(#&.>)) (<'letterbrei') (*./@:>:"1&:lettfreq # ]) wb
>> +--------+--------+--------+--------+--------+--------+
>> |bitterer|brittler|letterer|litterer|reletter|terrible|
>> +--------+--------+--------+--------+--------+--------+
>>    ts '6 {. ({~\:@:(#&.>)) (<''letterbrei'') (*./@:>:"1&:lettfreq # ]) wb'
>> 5.894405 136303168
>>
>>
>>
>> =@@i
>>
>>
>> Henry Rich schreef:
>>     
>>> 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
>>>
>>>   
>>>       
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
>>
>>     
> ----------------------------------------------------------------------
> 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