Escribir una función decodifica(t) tal que dada una string t de 26 carácteres que representa una tabla de codificación, retorne una función que, dada una string s, la decodifique siguiendo la string t.
La string t representa una tabla que indica cómo codificar el alfabeto siguiendo un cifrado por sustitución. Esta tabla t debe tener exactamente 26 carácteres y no ha de haber ninguno repetido.
Supondremos que los textos que se quiere decodificar se escribieron, antes de ser codificados, utilizando tan solo los carácteres ’abcdefghijklmnopqrstuvwxyz’ y el espacio. El espacio siempre se codificará con ’_’. Así, la tabla t codificará textos haciendo que la letra ’a’ sea t[0], la letra ’b’ sea t[1],…, la letra ’z’ sea t[25].
Por ejemplo, haciendo:
f = decodifica(’aikvfdrzblnsqtowuepgmjcyhx’)
entonces el resultado de f(’fpgf_fyaqft_to_fp_qmh_vbdbkbs’) debería ser ’este examen no es muy dificil’
Hay más ejemplos en el juego de pruebas público.
Entrada
La función tiene una string de tamaño 26 como parámetro.
Observaciones
Si se tiene una lista de carácteres lst y se quiere convertir a string se puede hacer con ’’.join(lst). Por ejemplo, el resultado de hacer ’’.join([’h’,’o’,’l’,’a’,’ ’,’m’,’u’,’n’,’d’,’o’]) es ’hola mundo’
No puede usarse ningún módulo adicional.
Una vez definida la función, al probarla en el REPL de Python debería salir lo mismo que puede observar más abajo.
>>> f = decodifica("bcdefghijklmnopqrstuvwxyza") >>> f('cfxbsf_pg_cvht_jo_uif_bcpwf_dpef') 'beware of bugs in the above code' >>> f('j_ibwf_pomz_qspwfe_ju_dpssfdu') 'i have only proved it correct' >>> f('opu_usjfe_ju') 'not tried it' >>> >>> # la taula de codificació poden ser caràcters que no siguin lletres >>> # la tabla de codificación puede contener carácteres que no sean letras >>> >>> f = decodifica("52-!813467/09*+.[();?`]<:>") >>> f('5_3++!_305))_6*_;48_26)4+.)_4+);80_6*_;48_!8`60)_)85;') 'a good glass in the bishops hostel in the devils seat' >>> f(';]8*;:_+*8_!83(88)_5*!_;46(;88*_96*?;8)') 'twenty one degrees and thirteen minutes' >>> f('*+(;485);_5*!_2:_*+(;4') 'northeast and by north' >>> f('956*_2(5*-4_)8`8*;4_0692_85);_)6!8') 'main branch seventh limb east side' >>> f(')4++;_1(+9_;48_081;_8:8_+1_;48_!85;4)_485!') 'shoot from the left eye of the deaths head' >>> f('5_288_06*8_1(+9_;48_;(88_;4(+?34_;48_)4+;_161;:_188;_+?;') 'a bee line from the tree through the shot fifty feet out' >>>