Jump to content

Next highest int from digits: Difference between revisions

m (→‎{{header|REXX}}: added zkl header)
(→‎{{header|zkl}}: added code)
Line 455:
 
=={{header|zkl}}==
<lang zkl>fcn nextHightest(N){ // N is int, BigInt or string -->String. Algorithm 2
<lang zkl></lang>
// 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>}</lang>
<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}}
<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>
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.