sursumCorda

922 Reputation

13 Badges

2 years, 206 days

MaplePrimes Activity


These are questions asked by sursumCorda

The sequence A161786 consists of “primes with at least one digit appearing exactly four times in the decimal expansion”. Below is the Maple program given in that OEIS page:

The code above picks out primes having exactly four identical digits (determined by ) from the first 10,000 prime numbers. However, it's easy to check that this program is rather slow (It takes about 2.6s to execute it!). 
Actually, I would like to select such primes from pn, pn+1, pn+2, …, pn+m-1 (typically, n=1,000,000 and m=1,000,000), where pk denotes the k-th prime number, yet the original program failes to do so in twenty minutes. Part of the reason is that for long sequences, the efficiency can be critical. Therefore I make a slight modification to the original code: 

A161786__0 := proc(m::nonnegint, n::posint := 1, ` $`)::'Vector'(prime):
	#(*
	    kernelopts(opaquemodules = false):
	# *)
	local p := ifelse(n = 1, 1, ithprime(n - 1)), vec := Vector('datatype' = prime);
	to m do
		if ormap(`=`, MultiSet(`convert/base`:-MakeSplit(length((p := nextprime(p))), 1, 10)(p)):-hash, 4) then
			vec ,= p
		fi
	od;
	vec
end:

Nevertheless, this version is still inefficient: 

time[real](A161786__0(10**6, 10**6));
 = 
                            182.414

Another choice is converting each of integers into a string: 

A161786__1 := proc(m::nonnegint, n::posint := 1, ` $`)::'Vector'(prime):
	options no_options:
	local p := ifelse(n = 1, 1, ithprime(n - 1)), vec := DEQueue();
	to m do
		if member(4, rhs~({StringTools['CharacterFrequencies'](nprintf("%d", (p := nextprime(p))), 'digit')})) then
			vec ,= p
		fi
	od;
	Vector([vec[]], 'datatype' = prime)
end:

This time the elapsed time is reduced to nearly two minutes: 

time[real](A161786__1(10**6, 10**6));
 = 
                            118.409

But can this task be accomplished within (a quarter of) a minute in modern Maple? In other words, is there a way to make further improvement on the performance? (Note that the reference time is mesured using a adjusted version (i.e., ) of the Mma code provided in that OEIS page.) 

Since strings are not mutable objects in Maple, the package provides two procedures, StringTools:-OldStringBuffer and StringTools:-StringBuffer, which appear heavily correlated with Java's  and . 

The help page of StringBuffer claims that use of a is much more efficient than the naive approach: 

(*
`G` and `F` are taken from the link above.
*)
G := proc()
   description "extremely inefficient string concatenator";
   local   r;
   r := proc()
       if nargs = 0 then
           ""
       elif nargs = 1 then
           args[ 1 ]
       else
           cat( args[ 1 ], procname( args[ 2 .. -1 ] ) )
       end if
   end proc;
   r( args )
end proc:
# # This can be transformed into an O(1) algorithm by passing a string buffer to the recursive calls.
F := proc()
   description "efficient version of G";
   local    b, r;
   b := StringTools:-StringBuffer();
   r := proc()
       if nargs = 1 then
           b:-append( args[ 1 ] )
       else
           b:-append( args[ 1 ] );
           procname( args[ 2 .. -1 ] )
       end if
   end proc;
   r( args ):-value()
end proc:
s := 'StringTools:-Random(10, print)' $ 1e4:
NULL;
time(G(s));
                             5.375

time(F(s));
                             1.125

But why not use the built-in cat directly? 

time(cat(s));
                               0.

time(StringTools:-Join([s], ""));
                               0.

Clearly, this is even more efficient

Here is the last example in that link. 

FilterFile := proc( fname::string, filter )
   local   b, line;
   b := StringTools:-StringBuffer();
   do
       line := readline( fname );
       if line = 0 then break end if;
       b:-append( filter( line ) )
   end do;
   b:-value()
end proc: # verbatim 
filename__0 := FileTools:-JoinPath(["example", "odyssey.txt"], 'base' = 'datadir'):
filename__1 := URL:-Download("https://gutenberg.org/ebooks\
/2600.txt.utf-8", "War-and-Peace.txt"):

fclose(filename__0):
    time[real]((rawRes0 := FilterFile(filename__0, StringTools:-Unique)));
                             0.223

fclose(filename__1):
    time[real]((rawRes1 := FilterFile(filename__1, StringTools:-Unique)));
                             1.097

Nevertheless, 

close(filename__0):
use StringTools, FileTools:-Text in
	time[real]((newRes0 := String(Support~(fscanf(filename__0, Repeat("%[^\n]%*c", CountLines(filename__0))))[])))
end;
                             0.118

close(filename__1):
use StringTools, FileTools:-Text in
	time[real]((newRes1 := String(Support~(fscanf(filename__1, Repeat("%[^\n]%*c", CountLines(filename__1))))[])))
end;
                             0.580

evalb(newRes0 = rawRes0 and newRes1 = rawRes1);
                              true

As you can see, these experiments just tell an opposite story. Isn't the so-called "StringBuffer" obsolete today

Delay differential equations in Chebfun lists 15 examples "taken from the literature". Many of them can be (numerically) solved in Maple without difficulty, yet when I attempt to solve the  in the above link, Maple's internal solver `dsolve/numeric` just halts with an error. 

plots:-odeplot(dsolve({D(u)(t) + u(t)**2 + 2*u(1/2*t) = 1/2*exp(t), u(0) = u(1/3)}, type = numeric, range = 0 .. 1/3), size = ["default", "golden"]);
Error, (in dsolve/numeric) delay equations are not supported for bvp solvers

Even if I guess an initial (or final) value artificially, the solution is still less reliable (For instance, what is the approximate endpoint value? 0.26344 or 0.2668?): 

restart;
dde := D(u)(t) + u(t)**2 + u(t/2)*2 = exp(t)/2:
x__0 := 2668/10000:
sol0 := dsolve([dde, u(0) = x__0], type = numeric, 'delaymax' = 1/6, range = 0 .. 1/3):
plots['odeplot'](sol0, [[t, u(t)], [t, x__0]], 'size' = ["default", "golden"]);

x__1 := 26344/100000:
sol1 := dsolve([dde, u(1/3) = x__1], type = numeric, 'delaymax' = 1/6, range = 0 .. 1/3):
plots['odeplot'](sol1, [[t, u(t)], [t, x__1]], size = ["default", "golden"]);

Compare:  (Note that the reference numerical solution implies that its minimum should be no less than 0.258 (Is this incorrect?).).

And actually, the only known constraint is simply u(0)=u(⅓) (so neither value is known beforehand). Can Maple process this boundary condition automatically (that is, without the need for manual preprocessing and in absence of any other prior information)?
I have read the help page How to | Numeric Delay Differential Equations and Numerical Solution of Difficult ODE Boundary Value Problems, but it appears that those techniques are more or less ineffective here. So, how do I solve such a "first order nonlinear 'BVP' with pantograph delay" in Maple?

For instance, “[1, 2, 3]”, “[``([1, 2]), uneval([3])]”, and “[[1, 2], [3, 'NULL']]” are fully rectangular. “[1, 2, [3]]”, “[`[]`(1, 2), [3]]”, and “[[1, 2], [3, NULL]]” are considered nonrectangular, but if we temporarily freeze the "ragged" parts or regard them as a depth-1 container, the corresponding expressions will seem rectangular. `type(…, list(Non(list)))` and `type(…, listlist(Non(list)))` check these, but they do not work for general cases.
To be specific, the desired output should be something like

IsRectangular([[[l, 2], [3, 4]], [[5, 6], [7, 8]]]);
 = 
                            true, 3

IsRectangular([[[O, l, 2], [3, 4]], [[5, 6], [7, 8]]]);
 = 
                            false, 2

IsRectangular([[[[l], 2], [3, 4]], [[5, 6], [7, 8]]], 3);
 = 
                            true, 3

IsRectangular([[O, [l, 2], [3, 4]], [[5, 6], [7, 8]]], 2);
 = 
                            false, 1

The results above can be obtained by some observations. However, if the input has deeper levels, evaluating this will be a punishing work: 

test__1 := [[[[[[[[-288],[-287],[-286]],[[-285],[-284],[-283]],[[-282],[-281],[-280]],[[-279],[-278],[-277]]]],[[[[-276],[-275],[-274]],[[-273],[-272],[-271]],[[-270],[-269],[-268]],[[-267],[-266],[-265]]]],[[[[-264],[-263],[-262]],[[-261],[-260],[-259]],[[-258],[-257],[-256]],[[-255],[-254],[-253]]]]],[[[[[-252],[-251],[-250]],[[-249],[-248],[-247]],[[-246],[-245],[-244]],[[-243],[-242],[-241]]]],[[[[-240],[-239],[-238]],[[-237],[-236],[-235]],[[-234],[-233],[-232]],[[-231],[-230],[-229]]]],[[[[-228],[-227],[-226]],[[-225],[-224],[-223]],[[-222],[-221],[-220]],[[-219],[-218],[-217]]]]]],[[[[[[-216],[-215],[-214]],[[-213],[-212],[-211]],[[-210],[-209],[-208]],[[-207],[-206],[-205]]]],[[[[-204],[-203],[-202]],[[-201],[-200],[-199]],[[-198],[-197],[-196]],[[-195],[-194],[-193]]]],[[[[-192],[-191],[-190]],[[-189],[-188],[-187]],[[-186],[-185],[-184]],[[-183],[-182],[-181]]]]],[[[[[-180],[-179],[-178]],[[-177],[-176],[-175]],[[-174],[-173],[-172]],[[-171],[-170],[-169]]]],[[[[-168],[-167],[-166]],[[-165],[-164],[-163]],[[-162],[-161],[-160]],[[-159],[-158],[-157]]]],[[[[-156],[-155],[-154]],[[-153],[-152],[-151]],[[-150],[-149],[-148]],[[-147],[-146],[-145]]]]]],[[[[[[-144],[-143],[-142]],[[-141],[-140],[-139]],[[-138],[-137],[-136]],[[-135],[-134],[-133]]]],[[[[-132],[-131],[-130]],[[-129],[-128],[-127]],[[-126],[-125],[-124]],[[-123],[-122],[-121]]]],[[[[-120],[-119],[-118]],[[-117],[-116],[-115]],[[-114],[-113],[-112]],[[-111],[-110],[-109]]]]],[[[[[-108],[-107],[-106]],[[-105],[-104],[-103]],[[-102],[-101],[-100]],[[-99],[-98],[-97]]]],[[[[-96],[-95],[-94]],[[-93],[-92],[-91]],[[-90],[-89],[-88]],[[-87],[-86],[-85]]]],[[[[-84],[-83],[-82]],[[-81],[-80],[-79]],[[-78],[-77],[-76]],[[-75],[-74],[-73]]]]]],[[[[[[-72],[-71],[-70]],[[-69],[-68],[-67]],[[-66],[-65],[-64]],[[-63],[-62],[-61]]]],[[[[-60],[-59],[-58]],[[-57],[-56],[-55]],[[-54],[-53],[-52]],[[-51],[-50],[-49]]]],[[[[-48],[-47],[-46]],[[-45],[-44],[-43]],[[-42],[-41],[-40]],[[-39],[-38],[-37]]]]],[[[[[-36],[-35],[-34]],[[-33],[-32],[-31]],[[-30],[-29],[-28]],[[-27],[-26],[-25]]]],[[[[-24],[-23],[-22]],[[-21],[-20],[-19]],[[-18],[-17],[-16]],[[-15],[-14],[-13]]]],[[[[-12],[-11],[-10]],[[-9],[-8],[-7]],[[-6],[-5],[-4]],[[-3],[-2],[-1],[-0]]]]]]],[[[[[[[0],[1],[2]],[[3],[4],[5]],[[6],[7],[8]],[[9],[10],[11]]]],[[[[12],[13],[14]],[[15],[16],[17]],[[18],[19],[20]],[[21],[22],[23]]]],[[[[24],[25],[26]],[[27],[28],[29]],[[30],[31],[32]],[[33],[34],[35]]]]],[[[[[36],[37],[38]],[[39],[40],[41]],[[42],[43],[44]],[[45],[46],[47]]]],[[[[48],[49],[50]],[[51],[52],[53]],[[54],[55],[56]],[[57],[58],[59]]]],[[[[60],[61],[62]],[[63],[64],[65]],[[66],[67],[68]],[[69],[70],[71]]]]]],[[[[[[72],[73],[74]],[[75],[76],[77]],[[78],[79],[80]],[[81],[82],[83]]]],[[[[84],[85],[86]],[[87],[88],[89]],[[90],[91],[92]],[[93],[94],[95]]]],[[[[96],[97],[98]],[[99],[100],[101]],[[102],[103],[104]],[[105],[106],[107]]]]],[[[[[108],[109],[110]],[[111],[112],[113]],[[114],[115],[116]],[[117],[118],[119]]]],[[[[120],[121],[122]],[[123],[124],[125]],[[126],[127],[128]],[[129],[130],[131]]]],[[[[132],[133],[134]],[[135],[136],[137]],[[138],[139],[140]],[[141],[142],[143]]]]]],[[[[[[144],[145],[146]],[[147],[148],[149]],[[150],[151],[152]],[[153],[154],[155]]]],[[[[156],[157],[158]],[[159],[160],[161]],[[162],[163],[164]],[[165],[166],[167]]]],[[[[168],[169],[170]],[[171],[172],[173]],[[174],[175],[176]],[[177],[178],[179]]]]],[[[[[180],[181],[182]],[[183],[184],[185]],[[186],[187],[188]],[[189],[190],[191]]]],[[[[192],[193],[194]],[[195],[196],[197]],[[198],[199],[200]],[[201],[202],[203]]]],[[[[204],[205],[206]],[[207],[208],[209]],[[210],[211],[212]],[[213],[214],[215]]]]]],[[[[[[216],[217],[218]],[[219],[220],[221]],[[222],[223],[224]],[[225],[226],[227]]]],[[[[228],[229],[230]],[[231],[232],[233]],[[234],[235],[236]],[[237],[238],[239]]]],[[[[240],[241],[242]],[[243],[244],[245]],[[246],[247],[248]],[[249],[250],[251]]]]],[[[[[252],[253],[254]],[[255],[256],[257]],[[258],[259],[260]],[[261],[262],[263]]]],[[[[264],[265],[266]],[[267],[268],[269]],[[270],[271],[272]],[[273],[274],[275]]]],[[[[276],[277],[278]],[[279],[280],[281]],[[282],[283],[284]],[[285],[286],[287]]]]]]]]:
test__2 := [[[[[[[[-288],[-287],[-286]],[[-285],[-284],[-283]],[[-282],[-281],[-280]],[[-279],[-278],[-277]]]],[[[[-276],[-275],[-274]],[[-273],[-272],[-271]],[[-270],[-269],[-268]],[[-267],[-266],[-265]]]],[[[[-264],[-263],[-262]],[[-261],[-260],[-259]],[[-258],[-257],[-256]],[[-255],[-254],[-253]]]]],[[[[[-252],[-251],[-250]],[[-249],[-248],[-247]],[[-246],[-245],[-244]],[[-243],[-242],[-241]]]],[[[[-240],[-239],[-238]],[[-237],[-236],[-235]],[[-234],[-233],[-232]],[[-231],[-230],[-229]]]],[[[[-228],[-227],[-226]],[[-225],[-224],[-223]],[[-222],[-221],[-220]],[[-219],[-218],[-217]]]]]],[[[[[[-216],[-215],[-214]],[[-213],[-212],[-211]],[[-210],[-209],[-208]],[[-207],[-206],[-205]]]],[[[[-204],[-203],[-202]],[[-201],[-200],[-199]],[[-198],[-197],[-196]],[[-195],[-194],[-193]]]],[[[[-192],[-191],[-190]],[[-189],[-188],[-187]],[[-186],[-185],[-184]],[[-183],[-182],[-181]]]]],[[[[[-180],[-179],[-178]],[[-177],[-176],[-175]],[[-174],[-173],[-172]],[[-171],[-170],[-169]]]],[[[[-168],[-167],[-166]],[[-165],[-164],[-163]],[[-162],[-161],[-160]],[[-159],[-158],[-157]]]],[[[[-156],[-155],[-154]],[[-153],[-152],[-151]],[[-150],[-149],[-148]],[[-147],[-146],[-145]]]]]],[[[[[[-144],[-143],[-142]],[[-141],[-140],[-139]],[[-138],[-137],[-136]],[[-135],[-134],[-133]]]],[[[[-132],[-131],[-130]],[[-129],[-128],[-127]],[[-126],[-125],[-124]],[[-123],[-122],[-121]]]],[[[[-120],[-119],[-118]],[[-117],[-116],[-115]],[[-114],[-113],[-112]],[[-111],[-110],[-109]]]]],[[[[[-108],[-107],[-106]],[[-105],[-104],[-103]],[[-102],[-101],[-100]],[[-99],[-98],[-97]]]],[[[[-96],[-95],[-94]],[[-93],[-92],[-91]],[[-90],[-89],[-88]],[[-87],[-86],[-85]]]],[[[[-84],[-83],[-82]],[[-81],[-80],[-79]],[[-78],[-77],[-76]],[[-75],[-74],[-73]]]]]],[[[[[[-72],[-71],[-70]],[[-69],[-68],[-67]],[[-66],[-65],[-64]],[[-63],[-62],[-61]]]],[[[[-60],[-59],[-58]],[[-57],[-56],[-55]],[[-54],[-53],[-52]],[[-51],[-50],[-49]]]],[[[[-48],[-47],[-46]],[[-45],[-44],[-43]],[[-42],[-41],[-40]],[[-39],[-38],[-37]]]]],[[[[[-36],[-35],[-34]],[[-33],[-32],[-31]],[[-30],[-29],[-28]],[[-27],[-26],[-25]]]],[[[[-24],[-23],[-22]],[[-21],[-20],[-19]],[[-18],[-17],[-16]],[[-15],[-14],[-13]]]],[[[[-12],[-11],[-10]],[[-9],[-8],[-7]],[[-6],[-5],[-4]],[[-3],[-2,0],[-0]]]]]]],[[[[[[[-1],[1],[2]],[[3],[4],[5]],[[6],[7],[8]],[[9],[10],[11]]]],[[[[12],[13],[14]],[[15],[16],[17]],[[18],[19],[20]],[[21],[22],[23]]]],[[[[24],[25],[26]],[[27],[28],[29]],[[30],[31],[32]],[[33],[34],[35]]]]],[[[[[36],[37],[38]],[[39],[40],[41]],[[42],[43],[44]],[[45],[46],[47]]]],[[[[48],[49],[50]],[[51],[52],[53]],[[54],[55],[56]],[[57],[58],[59]]]],[[[[60],[61],[62]],[[63],[64],[65]],[[66],[67],[68]],[[69],[70],[71]]]]]],[[[[[[72],[73],[74]],[[75],[76],[77]],[[78],[79],[80]],[[81],[82],[83]]]],[[[[84],[85],[86]],[[87],[88],[89]],[[90],[91],[92]],[[93],[94],[95]]]],[[[[96],[97],[98]],[[99],[100],[101]],[[102],[103],[104]],[[105],[106],[107]]]]],[[[[[108],[109],[110]],[[111],[112],[113]],[[114],[115],[116]],[[117],[118],[119]]]],[[[[120],[121],[122]],[[123],[124],[125]],[[126],[127],[128]],[[129],[130],[131]]]],[[[[132],[133],[134]],[[135],[136],[137]],[[138],[139],[140]],[[141],[142],[143]]]]]],[[[[[[144],[145],[146]],[[147],[148],[149]],[[150],[151],[152]],[[153],[154],[155]]]],[[[[156],[157],[158]],[[159],[160],[161]],[[162],[163],[164]],[[165],[166],[167]]]],[[[[168],[169],[170]],[[171],[172],[173]],[[174],[175],[176]],[[177],[178],[179]]]]],[[[[[180],[181],[182]],[[183],[184],[185]],[[186],[187],[188]],[[189],[190],[191]]]],[[[[192],[193],[194]],[[195],[196],[197]],[[198],[199],[200]],[[201],[202],[203]]]],[[[[204],[205],[206]],[[207],[208],[209]],[[210],[211],[212]],[[213],[214],[215]]]]]],[[[[[[216],[217],[218]],[[219],[220],[221]],[[222],[223],[224]],[[225],[226],[227]]]],[[[[228],[229],[230]],[[231],[232],[233]],[[234],[235],[236]],[[237],[238],[239]]]],[[[[240],[241],[242]],[[243],[244],[245]],[[246],[247],[248]],[[249],[250],[251]]]]],[[[[[252],[253],[254]],[[255],[256],[257]],[[258],[259],[260]],[[261],[262],[263]]]],[[[[264],[265],[266]],[[267],[268],[269]],[[270],[271],[272]],[[273],[274],[275]]]],[[[[276],[277],[278]],[[279],[280],[281]],[[282],[283],[284]],[[285],[286],[287]]]]]]]]:
test__3 := [[[[[[[[-288],[-287],[-286]],[[-285],[-284],[-283]],[[-282],[-281],[-280]],[[-279],[-278],[-277]]]],[[[[-276],[-275],[-274]],[[-273],[-272],[-271]],[[-270],[-269],[-268]],[[-267],[-266],[-265]]]],[[[[-264],[-263],[-262]],[[-261],[-260],[-259]],[[-258],[-257],[-256]],[[-255],[-254],[-253]]]]],[[[[[-252],[-251],[-250]],[[-249],[-248],[-247]],[[-246],[-245],[-244]],[[-243],[-242],[-241]]]],[[[[-240],[-239],[-238]],[[-237],[-236],[-235]],[[-234],[-233],[-232]],[[-231],[-230],[-229]]]],[[[[-228],[-227],[-226]],[[-225],[-224],[-223]],[[-222],[-221],[-220]],[[-219],[-218],[-217]]]]]],[[[[[[-216],[-215],[-214]],[[-213],[-212],[-211]],[[-210],[-209],[-208]],[[-207],[-206],[-205]]]],[[[[-204],[-203],[-202]],[[-201],[-200],[-199]],[[-198],[-197],[-196]],[[-195],[-194],[-193]]]],[[[[-192],[-191],[-190]],[[-189],[-188],[-187]],[[-186],[-185],[-184]],[[-183],[-182],[-181]]]]],[[[[[-180],[-179],[-178]],[[-177],[-176],[-175]],[[-174],[-173],[-172]],[[-171],[-170],[-169]]]],[[[[-168],[-167],[-166]],[[-165],[-164],[-163]],[[-162],[-161],[-160]],[[-159],[-158],[-157]]]],[[[[-156],[-155],[-154]],[[-153],[-152],[-151]],[[-150],[-149],[-148]],[[-147],[-146],[-145]]]]]],[[[[[[-144],[-143],[-142]],[[-141],[-140],[-139]],[[-138],[-137],[-136]],[[-135],[-134],[-133]]]],[[[[-132],[-131],[-130]],[[-129],[-128],[-127]],[[-126],[-125],[-124]],[[-123],[-122],[-121]]]],[[[[-120],[-119],[-118]],[[-117],[-116],[-115]],[[-114],[-113],[-112]],[[-111],[-110],[-109]]]]],[[[[[-108],[-107],[-106]],[[-105],[-104],[-103]],[[-102],[-101],[-100]],[[-99],[-98],[-97]]]],[[[[-96],[-95],[-94]],[[-93],[-92],[-91]],[[-90],[-89],[-88]],[[-87],[-86],[-85]]]],[[[[-84],[-83],[-82]],[[-81],[-80],[-79]],[[-78],[-77],[-76]],[[-75],[-74],[-73]]]]]],[[[[[[-72],[-71],[-70]],[[-69],[-68],[-67]],[[-66],[-65],[-64]],[[-63],[-62],[-61]]]],[[[[-60],[-59],[-58]],[[-57],[-56],[-55]],[[-54],[-53],[-52]],[[-51],[-50],[-49]]]],[[[[-48],[-47],[-46]],[[-45],[-44],[-43]],[[-42],[-41],[-40]],[[-39],[-38],[-37]]]]],[[[[[-36],[-35],[-34]],[[-33],[-32],[-31]],[[-30],[-29],[-28]],[[-27],[-26],[-25]]]],[[[[-24],[-23],[-22]],[[-21],[-20],[-19]],[[-18],[-17],[-16]],[[-15],[-14],[-13]]]],[[[[-12],[-11],[-10]],[[-9],[-8],[-7]],[[-6],[-5],[-4]],[[-3],[-2,-0]]]]]]],[[[[[[-1],[[1],[2]],[[3],[4],[5]],[[6],[7],[8]],[[9],[10],[11]]]],[[[[12],[13],[14]],[[15],[16],[17]],[[18],[19],[20]],[[21],[22],[23]]]],[[[[24],[25],[26]],[[27],[28],[29]],[[30],[31],[32]],[[33],[34],[35]]]]],[[[[[36],[37],[38]],[[39],[40],[41]],[[42],[43],[44]],[[45],[46],[47]]]],[[[[48],[49],[50]],[[51],[52],[53]],[[54],[55],[56]],[[57],[58],[59]]]],[[[[60],[61],[62]],[[63],[64],[65]],[[66],[67],[68]],[[69],[70],[71]]]]]],[[[[[[72],[73],[74]],[[75],[76],[77]],[[78],[79],[80]],[[81],[82],[83]]]],[[[[84],[85],[86]],[[87],[88],[89]],[[90],[91],[92]],[[93],[94],[95]]]],[[[[96],[97],[98]],[[99],[100],[101]],[[102],[103],[104]],[[105],[106],[107]]]]],[[[[[108],[109],[110]],[[111],[112],[113]],[[114],[115],[116]],[[117],[118],[119]]]],[[[[120],[121],[122]],[[123],[124],[125]],[[126],[127],[128]],[[129],[130],[131]]]],[[[[132],[133],[134]],[[135],[136],[137]],[[138],[139],[140]],[[141],[142],[143]]]]]],[[[[[[144],[145],[146]],[[147],[148],[149]],[[150],[151],[152]],[[153],[154],[155]]]],[[[[156],[157],[158]],[[159],[160],[161]],[[162],[163],[164]],[[165],[166],[167]]]],[[[[168],[169],[170]],[[171],[172],[173]],[[174],[175],[176]],[[177],[178],[179]]]]],[[[[[180],[181],[182]],[[183],[184],[185]],[[186],[187],[188]],[[189],[190],[191]]]],[[[[192],[193],[194]],[[195],[196],[197]],[[198],[199],[200]],[[201],[202],[203]]]],[[[[204],[205],[206]],[[207],[208],[209]],[[210],[211],[212]],[[213],[214],[215]]]]]],[[[[[[216],[217],[218]],[[219],[220],[221]],[[222],[223],[224]],[[225],[226],[227]]]],[[[[228],[229],[230]],[[231],[232],[233]],[[234],[235],[236]],[[237],[238],[239]]]],[[[[240],[241],[242]],[[243],[244],[245]],[[246],[247],[248]],[[249],[250],[251]]]]],[[[[[252],[253],[254]],[[255],[256],[257]],[[258],[259],[260]],[[261],[262],[263]]]],[[[[264],[265],[266]],[[267],[268],[269]],[[270],[271],[272]],[[273],[274],[275]]]],[[[[276],[277],[278]],[[279],[280],[281]],[[282],[283],[284]],[[285],[286],[287]]]]]]]]:

Is there a generalized test procedure (e.g., ListTools:-IsRectangular) that effectively works for any nested list of an arbitrary nesting level? 

The so-called look-and-say sequence is something like:

# Starting digit: 0 
0→one 0→
10→one 1, then one 0→
1110→three 1's, then one 0→
3110→one 3, two 1's, then one 0→
132110→…

Rosetta Code gives an example of how to generate such sequences in Maple; however, the code in that example is lengthy. More to the point, compared to the subsequent Mathematica analogue, it is rather inefficient (though more readable, but that's not the point). 
I slightly modify the original code, and now the modified version is significantly faster than the original one: 
 

restart;

interface(version)NULL

`Standard Worksheet Interface, Maple 2023.1, Windows 10, July 7 2023 Build ID 1723669`

(1)
LookAndSay := proc(m::posint, n::nonnegint := 1, ` $`)::'Vector'(nonnegint);

LookAndSay(5, 0)NULL

Vector[column](%id = 36893490791509382076)

(2)

CodeTools['Usage'](LookAndSay(50), iterations = 4)

memory used=3.99GiB, alloc change=1.92MiB, cpu time=48.73s, real time=25.03s, gc time=39.05s

 

gc()time[real](LookAndSay(50))NULL

25.030

(3)


 

Download LookAndSay.mw

For the sake of convenience, I paste the original Maple code from the page above into here:

generate_seq := proc(s)
	local times, output, i;
	times := 1;
	output := "";
	for i from 2 to StringTools:-Length(s) do
		if (s[i] <> s[i-1]) then
			output := cat(output, times, s[i-1]);
			times := 1; # re-assign
		else 
			times ++;
		end if;
	end do;
	cat(output, times, s[i - 1]);
end proc:

Look_and_Say :=proc(n)
	local value, i;
	value := "1";
	print(value);
	for i from 2 to n do
		value := generate_seq(value);
		print(value);
	end do;
end proc:

#Test:
Look_and_Say(10);

Below is a modified version by me: 

LookAndSay := proc(m::posint, n::nonnegint := 1, $)::'Vector'(nonnegint);
    uses StringTools;
    local delete::'equationlist' := Repeat~(Explode(ExpandCharacterClass(":digit:")), 2), aux::procedure[nonnegint](posint) := proc(_::posint)::nonnegint;
        options cache;
        description "https://rosettacode.org/wiki/Look-and-say_sequence#Maple";
        if _ = 1 then
            n
        else
            local char::'nonemptystring' := String(thisproc(_ - 1)), temp::list(string)(*, str*);
            try
                temp := RegSplit(sprintf("(?=[%s])(?<=(?!%s)[%s])", Unique(char), Join(select[2](foldr, eval(apply), delete, rcurry(OrMap, Unique(char)), curry(curry, Has)), "|"), Unique(char)), char)
            catch "cannot compile regular expression: repetition-operator operand invalid":
                local rule::'equationlist' := (str -> str = Insert(str, 1, " "))~(subs(delete =~ NULL, Generate(2, Support(char))));
                temp := StringSplit(Subs(rule, char), " ") # to be replaced
            end;
            parse(String(seq('length(str), str[1]', str in temp)))
        fi;
    end;
    forget(aux);
    Vector[column](m, aux, datatype = nonnegint)
end:

The form LookAndSay(m, n); produces the first m terms in a "look-and-say" sequence starting with n (which is by default 1). Unfortunately, even if "the modified version is significantly faster than the original one", it is still much slower (25s versus 2.5s) than the uncompiled Mathematica implementation (on the same modern computer):

So, is there a workaround to evaluate LookAndSay(50, 1): in about three seconds (instead of half a minute) in the first call (without looking up a pre-calculated table) (on the same computer) as well? 

4 5 6 7 8 9 10 Last Page 6 of 19