Next highest int from digits: Difference between revisions

Content added Content deleted
(Promote to full task status.)
Line 344: Line 344:
if N > 0 && i > 1
if N > 0 && i > 1
rdig = dig[1:i-1]
rdig = dig[1:i-1]
ltdig = filter(x -> x > d, rdig)
if (j = findfirst(x -> x > d, rdig)) != nothing
if length(ltdig) > 0
j = findfirst(x -> x > d, rdig)
dig[i], dig[j] = dig[j], dig[i]
dig[i], dig[j] = dig[j], dig[i]
arr = (i == 2) ? dig : [sort(dig[1:i-1], rev=true); dig[i:end]]
arr = (i == 2) ? dig : [sort(dig[1:i-1], rev=true); dig[i:end]]
Line 354: Line 352:
elseif N < 0 && i > 1
elseif N < 0 && i > 1
rdig = dig[1:i-1]
rdig = dig[1:i-1]
ltdig = filter(x -> x < d, rdig)
if (j = findfirst(x -> x < d, rdig)) != nothing
if length(ltdig) > 0
j = findfirst(x -> x < d, rdig)
dig[i], dig[j] = dig[j], dig[i]
dig[i], dig[j] = dig[j], dig[i]
arr = (i == 2) ? dig : [sort(dig[1:i-1]); dig[i:end]]
arr = (i == 2) ? dig : [sort(dig[1:i-1]); dig[i:end]]
Line 396: Line 392:
-592491602 -592491260 -592491260 -592491260
-592491602 -592491260 -592491260 -592491260
9589776899767587796600 9589776899767587900667
9589776899767587796600 9589776899767587900667
4.015 ms (40364 allocations: 2.43 MiB)
4.027 ms (40364 allocations: 2.43 MiB)
for method 1A and n 7384440.
for method 1A and n 7384440.
1.234 ms (28804 allocations: 1.92 MiB)
1.237 ms (28804 allocations: 1.92 MiB)
for method 1B and n 7384440.
for method 1B and n 7384440.
1.440 μs (19 allocations: 1.89 KiB)
1.260 μs (14 allocations: 1.36 KiB)
for method 2 and n 7384440.
for method 2 and n 7384440.
</pre>
</pre>