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