Next highest int from digits: Difference between revisions
Content added Content deleted
m (→{{header|REXX}}: added zkl header) |
(→{{header|zkl}}: added code) |
||
Line 455: | Line 455: | ||
=={{header|zkl}}== |
=={{header|zkl}}== |
||
<lang zkl>fcn nextHightest(N){ // N is int, BigInt or string -->String. Algorithm 2 |
|||
⚫ | |||
// ds:=N.split().copy(); // mutable, int |
|||
<lang zkl></lang> |
|||
ds:=N.toString().split("").apply("toInt").copy(); // handle "234" or BigInt |
|||
if(ds.len()<2) return(0); |
|||
m:=ds[-1]; |
|||
foreach i in ([ds.len()-1 .. 0,-1]){ |
|||
d:=ds[i]; |
|||
if(d<m){ |
|||
dz,j,z := ds[i,*], dz.sort().filter1n('>(d)), dz[j]; |
|||
dz.del(j); |
|||
// return( ds[0,i].extend( z, dz.sort() ).concat().toInt() ); |
|||
return( ds[0,i].extend( z, dz.sort() ).concat() ); |
|||
} |
|||
m=m.max(d); |
|||
} |
|||
"0" |
|||
⚫ | |||
<lang zkl>ns:=T(0, 9, 12, 21, 12453, 738440, 45072010, 95322020); |
|||
foreach n in (ns){ println("%,d --> %,d".fmt(n,nextHightest(n))) } |
|||
n:="9589776899767587796600"; // or BigInt(n) |
|||
println("%s --> %s".fmt(n,nextHightest(n)));</lang> |
|||
{{out}} |
{{out}} |
||
<pre> |
<pre> |
||
0 --> 0 |
|||
9 --> 0 |
|||
12 --> 21 |
|||
21 --> 0 |
|||
12,453 --> 12,534 |
|||
738,440 --> 740,348 |
|||
45,072,010 --> 45,072,100 |
|||
95,322,020 --> 95,322,200 |
|||
9589776899767587796600 --> 9589776899767587900667 |
|||
</pre> |
</pre> |