Via VBA,
Row\Col |
A |
B |
C |
D |
E |
1 |
States |
ABCDE |
|
ABCD |
|
2 |
Start |
AAA |
B2: Input |
AAAA |
D2: Input |
3 |
|
AAB |
B3: =DecToBij(BijToDec(B2, B$1) + 1, B$1) |
AAAB |
D3: =DecToBij(BijToDec(D2, D$1) + 1, D$1) |
4 |
|
AAC |
|
AAAC |
|
5 |
|
AAD |
|
AAAD |
|
6 |
|
AAE |
|
AABA |
|
7 |
|
ABA |
|
AABB |
|
8 |
|
ABB |
|
AABC |
|
9 |
|
ABC |
|
AABD |
|
10 |
|
ABD |
|
AACA |
|
11 |
|
ABE |
|
AACB |
|
12 |
|
ACA |
|
AACC |
|
13 |
|
ACB |
|
AACD |
|
14 |
|
ACC |
|
AADA |
|
15 |
|
ACD |
|
AADB |
|
16 |
|
ACE |
|
AADC |
|
17 |
|
ADA |
|
AADD |
|
Function DecToBij(iNum As Long, sSym As String) As String
' shg 2014
' VBA or UDF
' Base sSym
' 1 "1" (Tally)
' 2 "12"
' 10 "123456789A"
' 26 "ABCDEFGHIJKLMNOPQRSTUVWXYZ" (Excel)
' Returns the bijective numeral for iNum using the digits in sSym
' https://en.wikipedia.org/wiki/Bijective_numeration
' https://en.wikipedia.org/wiki/Shortlex_order
'
If iNum > 0 Then DecToBij = DecToBij((iNum - 1) \ Len(sSym), sSym) & _
Mid(sSym, ((iNum - 1) Mod Len(sSym)) + 1, 1)
End Function
Function BijToDec(sBij As String, sSym As String) As Long
' shg 2014
' VBA or UDF
' Returns the decimal value for the bijective numeral in sBij
' https://en.wikipedia.org/wiki/Bijective_numeration
' https://en.wikipedia.org/wiki/Shortlex_order
If Len(sBij) Then BijToDec = InStr(sSym, Right(sBij, 1)) _
+ Len(sSym) * BijToDec(Left(sBij, Len(sBij) - 1), sSym)
End Function
Bookmarks