Python のコードが非常に遅いことがわかりました。freebasic への 1 分と比較して 8 分を使用して終了します。
誰か最適化を提案してください 。
最初に digit_array["a","b","c","d","e","f","g","h","i","j"] を作成します。
それを割って、余りを求めて、何度も、それを array_index[] に格納し、最後の桁として 1 を指定します。
else if および else コードは、完全でない除算の最後の反復を処理します。
最大インデックスを変数 i として格納します。
次に、array_index を最大値から 1 にループし、それを digit_array にマップしてから
、文字列を生成します (コードはコメントされています)。
追加: 20120903 digit_array
から
文字の組み合わせで文字列を作成するためにこれを作成するので、'q' 'z' などの一般的ではない文字や '4' のようないくつかの数字を
スキップできます
digit_array の文字は、a-z+A-Z+0-9+ の
いずれ
かになります。 ','5','6','7','8','9'] , x = 10
digit_array が ['a','b','c','d',' の場合は結果ベースe','f','g','h','i','j'] , x = 10
digit_array が ['0','1','2','3', '4','5','6','7','8'] , x = 9
digit_array が ['0','1','2','3','4','5','6', '7'] , x = 8
これで結果を出力できるようになりましたが、パフォーマンスが低下するだけです
パイソン3コード、
digit_array=[]
for i in range(0, 10): # range(10) ----> 0 1 2 3 4 ... 9
digit_array.append("")
digit_array[0] = "a"
digit_array[1] = "b"
digit_array[2] = "c"
digit_array[3] = "d"
digit_array[4] = "e"
digit_array[5] = "f"
digit_array[6] = "g"
digit_array[7] = "h"
digit_array[8] = "i"
digit_array[9] = "j"
array_index=[]
for i in range(0, 51):
array_index.append(0)
currpos = 0
currpos_end = pow((26+10+1),5)
#currpos_end = 1024
print (currpos)
currpos2 = currpos
x = 10 # ubound digit_array + 1, ("0","1") binary then x = 2
print ()
for currpos in range(currpos, currpos_end):
currpos2 = currpos
i = 1
while True :
if currpos2 > x:
array_index[i] = currpos2 % x
currpos2 = int(currpos2 / x)
elif currpos2 == x:
array_index[i] = 0
i += 1
array_index[i] = 1
break
else:
array_index[i] = currpos2
break
i += 1
print (i, " . ", currpos, currpos2)
for j in range(i , 1, -1):
# break #uncomment this and comment next 3 lines for speed testing
print (digit_array[array_index[j]], end='')
print (digit_array[array_index[1]], end='')
print ()
try:
input(".")
except:
pass
フリーベーシックコード、
Dim digit_array(0 To 100) As String
digit_array(0) = "a"
digit_array(1) = "b"
digit_array(2) = "c"
digit_array(3) = "d"
digit_array(4) = "e"
digit_array(5) = "f"
digit_array(6) = "g"
digit_array(7) = "h"
digit_array(8) = "i"
digit_array(9) = "j"
Dim array_index(0 To 50) As ULongInt
For i As Integer = 0 To 50
array_index(i) = 0
Next
Dim As ULongInt currpos
Dim As ULongInt currpos_end
Dim As ULongInt currpos2
Dim As ULongInt x = 10 'ubound digit_array + 1, ("0","1") binary then x = 2
Dim As ULongInt i
currpos = 0
currpos_end = (26+10+1)^5
'currpos_end = 1024
Print currpos
currpos2 = currpos
Print
For currpos = currpos To currpos_end
currpos2 = currpos
i = 1
Do
If currpos2 > x Then
array_index(i) = currpos2 Mod x
currpos2 = CULngInt(currpos2 / x)
ElseIf currpos2 = x Then
array_index(i) = 0
i += 1
array_index(i) = 1
Exit Do
Else
array_index(i) = currpos2
Exit Do
EndIf
i += 1
Loop
'Print i; " . "; currpos; " "; currpos2
'''first = i Until 1 = last
For j As Integer = i To 1 Step -1
'Print digit_array(array_index(j));
Next
'Print
'Sleep
Next
Print "."
Sleep