Probably why I continue having trouble solving those Project Euler problems 
involving partitions directly or indirectly... not to mention most other recent 
PE problems!

Cheers,

Mike

Please reply to mike_liz....@tiscali.co.uk.      
Sent from my iPad

> On 17 Apr 2019, at 14:16, Roger Hui <rogerhui.can...@gmail.com> wrote:
> 
> An amusing note about the memo operator and partition calculations.  In *A
> History of APL in 50 Functions <http://www.jsoftware.com/papers/50/>*,
> chapter 16, it is estimated that computing pn 200 without memo, would
> take 4.15407e34 years.
> 
> On Wed, Apr 17, 2019 at 1:01 AM 'Mike Day' via Programming <
> programm...@jsoftware.com> wrote:
> 
>> Over breakfast just now,  I've spotted two typos in my msg, below. It
>> said "Sent from my iPad" which
>> explains the two gratuitous capitalisations of " i.  " below - they
>> should have been " i.-3 " and " i.7 "
>> While I have the opportunity,  it's perhaps worth pointing out that the
>> other J wiki recurrence relation verb,
>> pnkv, also works here,  so
>>    {:79 pnkv 7
>> 108869
>>    {:79 pnkd 7
>> 108869
>> Roger's J-wiki essay may be found here:
>> https://code.jsoftware.com/wiki/Essays/Partitions
>> "Nimp O's" contribution uses this recurrence relation too, as noted in
>> that later message.
>> Cheers,
>> Mike
>> 
>> PS - while we're about it,  some time and space consumption:
>> 
>>    ts'{:79 pnkv 7'    NB. good for relatively low y vs x
>> 0.0002257 15808
>>    ts'{:79 pnkd 7'   NB. good for y approaching x
>> 0.000465978 7488
>>    ts'#7 mpart 79'  NB. not too bad for creating lists of m-partitions !
>> 0.0889004 2.83149e7
>> 
>>> On 17/04/2019 00:21, 'Mike Day' via Programming wrote:
>>> I’ve worked up a number of variant explicit partition functions. One of
>> these is mpart;
>>> m mpart n yields all m-partitions of n,  with no zeros, but allowing
>> repeats.
>>> 
>>> So, for example, using a smallish example:
>>>       3 mpart 7.  NB.  there are four 3-partitions of 7
>>> 3 2 2
>>> 3 3 1
>>> 4 2 1
>>> 5 1 1
>>> 
>>> This can lead to all 3-partitions of 10 excluding repeats as follows:
>>>    2 1 0 + "1] 3 mpart 7. NB. add I.-3 to 3-partitions of 7=10-3
>>> 5 3 2
>>> 5 4 1
>>> 6 3 1
>>> 7 2 1
>>>    (#~ 3=#@~."1) 3 mpart 10 NB. naive way, filter 3-partitions of 10
>> for non-repeats
>>> 5 3 2
>>> 5 4 1
>>> 6 3 1
>>> 7 2 1
>>> 
>>> Count numbers of m-partitions of 7 for m = 1,7:
>>>    (>:i. 7)#@ mpart"0]7
>>> 1 3 4 3 2 1 1
>>> 
>>> Here, however, you want 7-partitions of 100 without repeats, which can
>> be derived from
>>> 7-partitions of 79 = 100- +/ I.7
>>> 
>>> Perhaps surprisingly, mpart does manage to cope with this size of
>> problem:
>>>    #7 mpart 79
>>> 108869
>>> 
>>> You’ll find essays on partitions at J Wiki, including partition counting
>> functions, pnkv and pnkd.
>>> This is somewhat quicker than my constructive verb:
>>>    {:7 pnkd~ 79
>>> 108869
>>> 
>>> Note that these both count partitions excluding zero elements, whereas
>> your odo appears to include zeros.  Since you require all elements
>> different, I suppose you might wish to include 6-partitions as well. I
>> won’t attempt that here.
>>> 
>>> I’ll list my mpart and pnkd, which I think was one of Roger’s offerings:
>>> 
>>> NB. my function for m-partitions of n where x = m & n = y
>>> mpart =: 3 : 0
>>> :
>>> m =. x [ n =. y
>>> NB. smoutput m;n
>>> if. m = 1 do. ,: n  return. end.
>>> max =. n + 1 - m
>>> min =. >.n%m
>>> l   =. ,.min ([+i.@>:@-~ ) max
>>> for_j. >:}:}. i.m do.
>>>   rem =. n - +/"1 l
>>>   min =. >. rem%(m + 1 - j)
>>>   max =. min >. ({:"1 l) <. rem - m - j
>>>   nl  =. 0-.~, min ([+i.@>:@-~ )"0 max
>>>   l   =. nl,.~ l#~1 + max - min
>>> end.
>>> l,. n - +/"1 l
>>> )
>>> 
>>> NB. If n pnk k is the number of partitions of n with largest part k ,
>>> NB. or equivalently, the number of partitions of n with k parts, then
>>> NB. pnk satisfies the recurrence relation:
>>> NB. (n pnk k) = ((n-1) pnk k-1) + (n-k) pnk k
>>> NB.
>>> NB. partition number functions
>>> NB. The following function computes the number of partitions for
>> (k,k),...,(n,k)
>>> NB. and has a very different time-space model than pnkv.
>>> NB. It is very fast at k approaching n but loses to pnkv in performance
>> for small k.
>>> NB. n pnkd k : for [k,n] efficient for large k
>>> pnkd=: 4 : 0
>>>   m=. y <. s=. x-y
>>>   t=. >:i.s
>>>   p=. 1,s$0x
>>>   for_i. >:i.m do.
>>>     for_j. (<:i)}.t do. p=. (+/(j,j-i){p)j}p
>>>     end.
>>>   end.
>>> )
>>> 
>>> Hope that’s what you wanted,
>>> 
>>> Mike
>>> 
>>> 
>>> Sent from my iPad
>>> 
>>>> On 16 Apr 2019, at 22:13, 'Skip Cave' via Programming <
>> programm...@jsoftware.com> wrote:
>>>> 
>>>> I ran across this problem on Quora... How many ways can 100 be written
>> as a
>>>> sum of 7 ordered positive integers? (no repeats)
>>>> The obvious brute force approach in J would be:
>>>> 
>>>> 
>>>> odo=: #: i.@(*/) NB. Odometer verb
>>>> 
>>>> #b=.~./:~"1 a#~100=+/"1 a=.odo 7#100
>>>> 
>>>> |limit error: odo
>>>> 
>>>> | #b=:~./:~"1 a#~100=+/"1 a=: odo 7#100
>>>> 
>>>> Of course, odo 7#100 generates 1e14 integers (100^7) which exceeds
>> memory.
>>>> 
>>>> So what would the most efficient way to solve this question in J? The
>> most
>>>> concise?
>>>> 
>>>> 
>>>> Skip
>>>> 
>>>> Skip Cave
>>>> Cave Consulting LLC
>>>> ----------------------------------------------------------------------
>>>> For information about J forums see http://www.jsoftware.com/forums.htm
>>> ----------------------------------------------------------------------
>>> For information about J forums see http://www.jsoftware.com/forums.htm
>> 
>> ---
>> This email has been checked for viruses by Avast antivirus software.
>> https://www.avast.com/antivirus
>> 
>> ----------------------------------------------------------------------
>> 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