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