Pizzino (meervoud: pizzini) is een Italiaans woord dat werd afgeleid van het Siciliaanse equivalent pizzinu. Naast zijn oorspronkelijke betekenis van "klein stukje papier", wordt het woord vandaag de dag meer algemeen gebruikt om te verwijzen naar de kleine handgeschreven papiertjes die de Siciliaanse maffia gebruikt als communicatiemiddel tussen de verschillende kopstukken. De Siciliaanse maffiabaas Bernardo Provenzano behoort tot de bekendste maffiosi die gebruik maakten van pizzini, met name voor zijn instructies die Messina Denaro aanwezen als zijn opvolger. De pizzini van andere maffiosi hebben aanzien geholpen bij het politieonderzoek naar de Siciliaanse maffia.
Provenzano verborg de pizzini met zijn instructies bij een oude schapenboerderij onder stenen of onder de grond. Eenmaal gelezen, werden ze vernietigd. Hierbij gebruikte hij een codeertechniek waarbij elke letter eerst omgezet werd naar een natuurlijk getal overeenkomstig de positie van de letter in het alfabet (A=1, B=2, …), waarna elk van deze getallen nog eens verhoogd werd met drie. De getallen die men op deze manier bekwam voor elk van de letters van een woord, werden eenvoudigweg achter elkaar gezet om zo een groot getal te bekomen. Op die manier werd mia bijvoorbeeld gecodeerd als 16124, omdat \[\mbox{m} = 13 + 3 = 16,\ \mbox{i} = 9 + 3 = 12 \mbox{ en a} = 1 + 3 = 4\] Hierbij valt op te merken dat er gebruikgemaakt werd van het Italiaanse alfabet, dat een lichtjes gewijzigde volgorde heeft en minder letters telt dan het Latijnse alfabet:
ABCDEFGHILMNOPQRSTUVZ
Alles bij elkaar gaat het om een zeer eenvoudige en zeer oude code, waarvan de enige moeilijkheid erin bestaat dat het bij het decoderen niet eenduidig is of de cijfers individueel moeten behandeld worden of in groepen van twee. Zo las één van de onderschepte pizzini van Provenzano als
Ik ontmoette 512151522 191212154 en we kwamen overeen dat we elkaar na de vakantie terug zouden zien…
De naam werd gedecodeerd als Binnu Riina. Bruce Schneider — een Amerikaanse expert in de cryptografie — zei hierover op Discovery Channel News
Looks like kindergarten cryptography to me. It will keep your kid sister out, but it won't keep the police out. But what do you expect from someone who is computer illiterate?
De Italiaanse politie kreeg de kans om heel wat pizzini te lezen toen handlangers uit de inner circle van Provenzano konden overtuigd worden om als informant op te treden. Eenmaal ze in het bezit waren van voldoende pizzini, was de politie in staat om de code snel te breken. Een biograaf van Provenzano maakt melding van het feit dat hij ook nog een meer gecompliceerde code gebruikte die op heden nog altijd niet kon ontcijferd worden, en waarbij gebruikgemaakt werd van sommige woorden die Provenzano had onderlijnd in zijn Bijbel.
In deze opgave vragen we je om woorden te coderen als natuurlijke getallen, volgens een code die geïnspireerd is op de code die Provenzano gebruikte bij het schrijven van zijn pizzini. Hiervoor ga je als volgt te werk.
Schrijf een functie codeerLetter waaraan drie argumenten moeten doorgegeven worden: i) één enkele letter (string), ii) een getal $$n \in \mathbb{N}$$, en iii) een string van letters. De functie moet een natuurlijk getal teruggeven dat bekomen wordt door de positie van de gegeven letter (eerste argument) op te zoeken in de gegeven string van letters (derde argument), en daarbij de waarde $$n$$ op te tellen. Hierbij worden de posities van de letters in het derde argument genummerd vanaf 1 (eerste letter staat op positie 1, tweede letter op positie 2, …).
Schrijf een functie codeerWoord waaraan drie argumenten moeten doorgegeven worden: i) een woord (string), ii) een getal $$n \in \mathbb{N}$$, en iii) een string van letters. De functie moet een natuurlijk getal teruggeven dat gevormd wordt door de cijfers van alle getallen die je bekomt door de individuele letters van het gegeven woord om te zetten met de functie codeerLetter achter elkaar te zetten.
Voor beide functies stelt het derde argument een gegeven alfabet voor, waarbij je er mag van uitgaan dat elk karakter er hoogstens één keer in voorkomt. Bovendien mag je er in beide gevallen ook van uitgaan dat alle karakters van de string die als eerste argument wordt doorgegeven, voorkomen in het gegeven alfabet. Beide functies mogen ook geen onderscheid maken tussen hoofdletters en kleine letters.
>>> italiaans = 'ABCDEFGHILMNOPQRSTUVZ'
>>> codeerLetter('M', 3, italiaans)
14
>>> codeerWoord('MIA', 3, italiaans)
14124
>>> codeerWoord('Binnu', 3, italiaans)
512151522
>>> codeerWoord('Riina', 3, italiaans)
191212154
>>> latijns = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> codeerLetter('M', 3, latijns)
16
>>> codeerWoord('MIA', 3, latijns)
16124
>>> codeerWoord('Binnu', 3, latijns)
512171724
>>> codeerWoord('Riina', 3, latijns)
211212174