Hace poco en una entrevista de trabajo me pidieron encontrar lo siguiente:
1 2 3 4 5 6 7 | def encrypt(text): total_sum = 0 total_cnt = 0 for c in text: total_cnt += 1 total_sum += ord(c)**total_cnt return total_cnt, total_sum |
El código encripta una palabra, el objetivo es descifrar que palabra se ingresó con una salida dada.
Explicación del código:
Si se codifica la palabra "HOLA", La codificación de esta palabra viene dada por: ord(H)+ord(O)^2+ord(L)^3+ord(A)^4.
La función ord() devuelve el valor ASCII de un caracter.
ord(H)= 72
ord(O)^2=(79)^2 =6241
ord(L)^3=(76)^3=438976
ord(A)^4= (65)^4=17850625
HOLA=18295914
>>encrypt('HOLA')
(4,18295914)
¿Cuándo la función devuelve (4, 37348960), cual ha sido el valor del parámetro “text” ? (es mayúscula).
Se realiza el siguiente Script.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | def decrypt(total_cnt, total_sum): a=0 b=0 c=0 d=0 A=a B=b**2 C=c**3 D=d**4 for d in range(78,91): A=a B=b**2 C=c**3 D=d**4 if A+B+C+D ==total_sum: print chr(a), chr(b), chr(c), chr(d) for c in range(69,91): A=a B=b**2 C=c**3 D=d**4 if A+B+C+D ==total_sum: print chr(a), chr(b), chr(c), chr(d) for b in range(73,91): A=a B=b**2 C=c**3 D=d**4 if A+B+C+D ==total_sum: print chr(a), chr(b), chr(c), chr(d) for a in range(50,91): A=a B=b**2 C=c**3 D=d**4 if A+B+C+D ==total_sum: print chr(a), chr(b), chr(c), chr(d) print A+B+C+D, A,B,C,D,a,b,c,d |
y como resultado, la palabra ingresada fue: B I E N
No hay comentarios.:
Publicar un comentario