Xifrat de Substitució U61616


Statement
 

pdf   zip

thehtml

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.

Sample session
>>> 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'
>>>
Information
Author
Jordi Delgado (basat en el problema P35941, de Salvador Roura)
Language
Catalan
Other languages
Spanish
Official solutions
Python
User solutions
Python