Next highest int from digits: Difference between revisions
Content added Content deleted
Alpha bravo (talk | contribs) (Added AutoHotkey) |
|||
Line 64: | Line 64: | ||
:* 9589776899767587796600 |
:* 9589776899767587796600 |
||
<br><br> |
<br><br> |
||
=={{header|AutoHotkey}}== |
|||
===Permutation Version=== |
|||
<lang AutoHotkey>Next_highest_int(num){ |
|||
Arr := [] |
|||
for i, v in permute(num) |
|||
Arr[v] := true |
|||
for n, v in Arr |
|||
if found |
|||
return n |
|||
else if (n = num) |
|||
found := true |
|||
return 0 |
|||
} |
|||
permute(str, k:=0, l:=1){ |
|||
static res:=[] |
|||
r := StrLen(str) |
|||
k := k ? k : r |
|||
if (l = r) |
|||
return SubStr(str, 1, k) |
|||
i := l |
|||
while (i <= r){ |
|||
str := swap(str, l, i) |
|||
x := permute(str, k, l+1) |
|||
if (x<>"") |
|||
res.push(x) |
|||
str := swap(str, l, i++) |
|||
} |
|||
if (l=1) |
|||
return x:=res, res := [] |
|||
} |
|||
swap(str, l, i){ |
|||
x := StrSplit(str), var := x[l], x[l] := x[i], x[i] := var |
|||
Loop, % x.count() |
|||
res .= x[A_Index] |
|||
return res |
|||
}</lang> |
|||
Examples:<lang AutoHotkey>MsgBox % "" Next_highest_int(0) |
|||
. "`n" Next_highest_int(9) |
|||
. "`n" Next_highest_int(12) |
|||
. "`n" Next_highest_int(21) |
|||
. "`n" Next_highest_int(12453) |
|||
. "`n" Next_highest_int(738440) |
|||
. "`n" Next_highest_int(45072010) |
|||
. "`n" Next_highest_int(95322020)</lang> |
|||
{{out}} |
|||
<pre>0 |
|||
0 |
|||
21 |
|||
0 |
|||
12534 |
|||
740348 |
|||
45072100 |
|||
95322200</pre> |
|||
=={{header|C}}== |
=={{header|C}}== |