เมื่อได้รับสตริงหนึ่งสตริง เราสามารถสร้างสตริงต่างๆ โดยการสุ่มตัวอักษร ตัวเลข และอักขระพิเศษ จนกว่าจะได้สตริงที่ตรงกับค่าที่กำหนด
ตัวอย่าง
Input: PP Output: AK AK . . . . . (สุ่มไปเรื่อยๆ จนได้ PP)
อัลกอริธึม
- รับสตริงอินพุต
- เก็บชุดตัวอักษรทั้งหมดที่เป็นไปได้ (ตัวพิมพ์เล็ก, ตัวพิมพ์ใหญ่, ตัวเลข, อักขระพิเศษ) ไว้ในตัวแปร
- ใช้ลูปสองชั้นร่วมกับฟังก์ชันสุ่ม เพื่อสร้างทุกชุดการจัดหมู่ที่เป็นไปได้
- เปรียบเทียบสตริงที่สุ่มได้กับสตริงอินพุต ทุกตำแหน่ง
- ถ้าตำแหน่งไหนตรงกัน ให้เก็บไว้ และสุ่มต่อเฉพาะตำแหน่งที่ยังไม่ตรง
โค้ดตัวอย่าง
import string
import random
import time
my_possibleCharacters = string.ascii_lowercase + string.digits + string.ascii_uppercase + ' ., !?;:'
t = "ab"
my_attemptThis = ''.join(random.choice(my_possibleCharacters) for i in range(len(t)))
my_attemptNext = ''
com = False
iteration = 0
# วนลูปจนกว่าจะตรงกันทั้งหมด
while com == False:
print(my_attemptThis)
my_attemptNext = ''
com = True
for i in range(len(t)):
if my_attemptThis[i] != t[i]:
com = False
my_attemptNext += random.choice(my_possibleCharacters)
else:
my_attemptNext += t[i]
iteration += 1
my_attemptThis = my_attemptNext
time.sleep(0.1)
print("String matched after " + str(iteration) + " iterations")
ผลลัพธ์
36 G sM ,L jt g1 FN uR ;W Ja 3n 4o Gl kY NR oR Nw Lg Jt Od wN z0 J 3a 9J sF v g6 HO Ia AB Xa OX :N Wo Dp f; tt kf Er In ou bD T a0 aH aW a a8 ai ax az aN aJ ah a0 a. aq ar ax ai am a; aO as a; aS aL aQ a8 a3 ae a5 aS ao al aV ar aj aT aS ad ab String matched after 83 iterations