Escriure una funció descodifica(t) tal que donada una string t de 26 caràcters que representa una taula de codificació, retorni una funció que, donada una string s, la descodifiqui seguint la string t.
La string t representa una taula que indica com codificar l’alfabet seguint un xifrat de substitució. Aquesta taula t ha de tenir exactament 26 caràcters i no n’ha d’haver cap de repetit.
Suposarem que els textos que volem descodificar es van escriure, abans de ser codificats, fent servir només els caràcters ’abcdefghijklmnopqrstuvwxyz’ i l’espai. L’espai sempre el codificarem amb ’_’. Així, la taula t codificarà textos fent que la lletra ’a’ sigui t[0], la lletra ’b’ sigui t[1],…, la lletra ’z’ sigui t[25].
Per exemple, si fem:
f = descodifica(’aikvfdrzblnsqtowuepgmjcyhx’)
aleshores el resultat de f(’aumfpg_fyaqft_to_fp_rabef_vbdbkbs’) ha de ser ’aquest examen no es gaire dificil’
Veieu més exemples en els jocs de proves públics.
Entrada
La funció té una string de mida 26 com a paràmetre.
Observacions
Si teniu una llista de caràcters lst i la voleu convertir a string ho podeu fer amb ’’.join(lst). Per exemple, el resultat de fer ’’.join([’h’,’o’,’l’,’a’,’ ’,’m’,’ó’,’n’]) és ’hola món’
No podeu fer servir cap mòdul addicional.
Un cop definida la funció, en provar-la al REPL de Python us hauria de sortir el mateix que podeu observar més avall.
>>> f = descodifica("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 = descodifica("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' >>>