Een cryptogram is een soort puzzel waarbij een korte gecodeerde tekst gegeven wordt. Bij het coderen werden alle letters van het alfabet één-op-één afgebeeld op een andere letter van het alfabet. Een hoofdletter en zijn corresponderende kleine letter worden daarbij steeds op dezelfde letter afgebeeld, waarbij het gebruik van hoofdletters en kleine letters behouden blijft. Karakters die geen letters voorstellen blijven ongewijzigd in de gecodeerde tekst. Om de puzzel op te lossen moet de gebruikte afbeelding van de letters achterhaald worden, zodat de oorspronkelijke tekst terug kan gereconstrueerd worden. Ondanks het feit dat cryptogrammen ooit gebruikt werden voor meer serieuze toepassingen, vinden we ze de dag van vandaag hoofdzakelijk terug in kranten en tijdschriften waar ze tot ontspanning dienen voor de lezers.

cryptogram
Voorbeeld van een cryptogram.

Opgave

Schrijf een functie cryptogram waaraan twee stringargumenten moeten doorgegeven worden die even lang zijn. De eerste string stelt de gegeven tekst voor uit de opgave van een cryptogrampuzzel. De tweede string stelt een gedeeltelijke oplossing van het cryptogram voor. Hierbij werden sommige voorkomens van letters reeds vervangen door hun corresponderende letter. Letters van de gedeeltelijke oplossing die nog niet werden vervangen, worden aangegeven door een vraagteken (?). De functie moet een string teruggeven die zoveel mogelijk vraagtekens uit de gedeeltelijke oplossing vervangt door hun corresponderende letter (met behoud van hoofdletters en kleine letters), op basis van de letters die reeds werden vervangen.

Voorbeeld

>>> opgave = 'Qmvrbwlf xwkd iopzlw vf zml pcwvfxzvyl.'
>>> oplossing = 'Ch?ld??? ??ow fas??r ?n ??? ?p?i?gt?me.'
>>> cryptogram(opgave, oplossing)
'Children grow faster in the springtime.'

>>> opgave = 'Zhp suxobpuw sbmtkopw Nxwkdnx.'
>>> oplossing = '?h? p?n???a? ?rod?ces I???l??.'
>>> cryptogram(opgave, oplossing)
'?he pancreas prod?ces Ins?lin.'

>>> opgave = 'Jujso ldmtq wyjqi tvadi ltek tq lads tw t wcqnej xjee.'
>>> oplossing = '?v?ry ??ma? ?p??? ?bout h??f ?? ???? ?s ? ??ng?e c?l?.'
>>> cryptogram(opgave, oplossing)
'Every human spent about half an hour as a s?ngle cell.'

>>> opgave = "V atult'a amrdd qvl zr nrbrqbrn zx v wumvl v medr vivx."
>>> oplossing = "? ????k's ???l? ??n ?? ??t???ed ?y a hum?? ? ?i?? ?w??."
>>> cryptogram(opgave, oplossing)
"A skunk's smell ?an ?e dete?ted ?y a human a mile away."