Slightly more economical to avoid boxing the numeric list:
(\: #@>)
instead of
({~\:@:(#&.>))
Henry Rich
Aai wrote:
> 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
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm