I’ll change my hbi to

hbi=: ([ (] +/ . * >:@[ ^ ($: i.@-@#)) #.^:_1)^:(*@])"0
gs=: , >:@# <:@hbi {:


I think using power ^: is prettier than using agenda @., and I replaced a fork 
with a hook.

Thanks,
Louis

> On 12 Apr 2018, at 02:20, 'Jon Hough' via Programming 
> <programm...@jsoftware.com> wrote:
> 
> Very nice solution. This style of solution what I wanted to write.
> 
> Just to compare:
>   timespacex 'genSeq 2 4 20'
> 0.000741 13184
>   timespacex ' gs^:(0~:{:)^:20 ] 4x'
> 0.000892 49024
> 
> As an FYI, there is also a Haskell solutiuon here: 
> https://oeis.org/A211378/a211378.hs.txt
> In that file there are the ids of various Sloane Number sequences for 
> Goodstein Sequences, just
> in case you wanted to verify your solution.
> e.g.
> A056193
> A222117
> A059933
> A211378
> 
> Thanks,
> Jon
> --------------------------------------------
> On Thu, 4/12/18, Louis de Forcrand <ol...@bluewin.ch> wrote:
> 
> Subject: Re: [Jprogramming] Goodstein Sequences and Hereditary base-n    
> notation
> To: programm...@jsoftware.com
> Date: Thursday, April 12, 2018, 12:01 AM
> 
> Hi,
> 
> This is my tacit version. Not claiming speed
> (or anything in the way of code legibility for that matter).
> The important verb is hbi, hereditary base-x incrementation
> of y used in creating the Goodstein sequence.
> My gs verb uses a starting base of 2, and gss
> starts with base x:
> 
> hbi=:
> ([ (] +/ . * >:@[ ^ [ $: i.@-@#@]) #.^:_1)`]@.(0 =
> ])"0
> gs=: , >:@# <:@hbi {:
> gss=: ] , (+ <:@#) <:@hbi {:@]
> 
>    gs^:(0~:{:)^:10 ] 3x
> 3 3 3 2 1 0
>    gs^:(0~:{:)^:10
> ] 4x
> 4 26 41 60 83 109 139 173 211 253
> 299
>    gs^:(0~:{:)^:3 ] 19x
> 19 7625597484990
> 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084099
> 191101259794547752035640455...
> 
>    3 gss^:(0~:{:@])^:10 ] 3x
> 3
> 3 2 1 0
> 
> 
> Sorry if I didn’t explain my code, kind of
> short on time. I’m pretty sure it works though!
> 
> Cheers,
> Louis
> 
>> On
> 11 Apr 2018, at 15:15, 'Jon Hough' via Programming
> <programm...@jsoftware.com>
> wrote:
>> 
>> My first
> answer was actually comletely wrong, and only works for the
> simplest cases. This is a more robust and correct
> solution
>> 
>> 
> goodstein=: 4 : 0"0 0
>> if. y = x
> do.
>>   x+1 return.
>> 
> elseif. y = 0 do.
>>   0 return.
>> end.
>> s=. I. x
> (|.@:((>:@:>.@:^. # [) #: ])) y
>> 
> d=. (x+1) ^ (x:x) goodstein x: s
>> +/d
>> )
>> 
>> G=: <:@:goodstein
>> 
> 
>> NB. generates sequence
>> genSeq=: 3 : 0"1
>> 
> 'base val its'=. y
>> c=. 0
>> vals=. val
>> whilst.
> its > c=. c+1 do.
>>   val=. base G
> val
>>   vals=. vals,val
>>   base=. base+1
>> 
> end.
>> vals
>> )
>> 
>> genSeq 2 4 10
>> 4 26 41 60 83 109 139 173 211 253 299
>> 
>> genSeq 2 19 3
>> 19 7625597484990
> 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084099
> 19110125979454775203564045597039645991980810489900943371395127892465205302426158030...
>> 
>> 
>> 
> --------------------------------------------
>> On Wed, 4/11/18, 'Jon Hough' via
> Programming <programm...@jsoftware.com>
> wrote:
>> 
>> Subject:
> [Jprogramming] Goodstein Sequences and Hereditary base-n
> notation
>> To: "Programming
> Forum" <programm...@jsoftware.com>
>> Date: Wednesday, April 11, 2018, 5:14
> PM
>> 
>> 
> Goodstein's theorem: https://en.wikipedia.org/wiki/Goodstein%27s_theorem
>> This states  that every Goodstein
>> sequence eventually terminates at 0.
>> The wikipedia page defines Goodstein
>> sequences in terms of Hereditary base-n
> notation
>> one such sequence is
> 4,26,41,60...
>> 
>> 
> Copying verbatim from wikipedia:
>> 
> ==============
>> The Goodstein sequence
> G(m) of a number
>> m is a sequence of
> natural numbers. The first element in the
>> sequence G(m) is m itself. To get the
> second, G(m)(2), write
>> m in hereditary
> base-2 notation, change all the 2s to 3s,
>> and then subtract 1 from the result. In
> general, the
>> (n + 1)-st term
> G(m)(n + 1) of the Goodstein
>> 
> sequence of m is as follows:
>> 
>> Take the hereditary base-n + 1
>> representation of G(m)(n).
>> Replace each occurrence of the
>> base-n + 1 with n + 2.
>> Subtract one. (Note that the next term
>> depends both on the previous term and on
> the index n.)
>> Continue until the result
> is zero, at
>> which point the sequence
> terminates.
>> ===============
>> 
>> The sequences take
> an impossibly long
>> time to terminate
> for most inputs, so there is no use
>> 
> writing a verb that iterates until convergance. This is
> my
>> verb that will calculate the first N
> elements of the
>> sequence,
>> starting with a given base and val. the
>> base should start at 2, to conform to the
> above definition.
>> 
>> 
> 
>> goodstein=: 3 : 0
>> 
> 'base val its'=. y
>> vals=.
> ''
>> c=: 0
>> 
> whilst.its> c=: c+1 do.
>>    if. val =
> 0 do. vals return.
>>    else.
>>      t=: ((1+
>>> 
> .base^.val)#base) #: val
>>      if. base
> < # t do.
>>        if. 0 < base
> {
>> |.t do.
>>      
>    tr=: 0
>> (base}) |.t
>>          if.
>> 
> (base+1) < # tr do.
>>           
> ts=:
>> (1+(base+1){tr) ((x+1)}) tr
>>            ts=:
>> 
> |.ts
>>          else.
>>            ts=:
>> 
> tr,1
>>            ts=:
>> |.ts
>>         
> end.
>>        else. ts=: t end.
>>      else.
>>       
> ts=: t
>>      end.
>>      val=. <:(base+1) #.
>> ts
>>      vals=.
> vals,val
>>      base=. base+1
>>    end.
>> end.
>> vals
>> )
>> 
>> 
>> 
>> NB. example
>> goodstein 2 4 9
>> 26 41
> 60 83 109 139 173 211 253 
>> NB.
> continues to very large numbers.
>> 
>>   goodstein 2 3 5
>> 3 3
> 2 1 0   NB. terminates after 6
>> 
> iterations
>> 
>> Is was
> hoping the goodstein verb could
>> be
> defined tacitly, but my verb is clearly a bit of a mess.
>> Just for fun, any elegant solutions?
>> 
>> Thanks,
>> Jon
>> 
> ----------------------------------------------------------------------
>> 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