Terwijl hij op zaterdagnamiddagronde was bij zijn parochianen, bleef de nieuwe pastoor van een dorp voor de gesloten deur van een huis staan. Er was overduidelijk iemand thuis, maar hij bleef herhaaldelijk op de deur kloppen zonder dat er iemand kwam opendoen. Onverwijld haalde hij uiteindelijk één van zijn naamkaartjes uit, schreef Openbaring 3:20 op de achterkant en schoof het onder de deur.
Na de zondagsmis vond hij zijn naamkaartje terug in het collectemandje. Onder zijn eigen handschrift had iemand anders geschreven Genesis 3:10.
De Bijbel is een bundeling van verschillende kortere boeken die los van elkaar en over verschillende periodes geschreven werden, en pas later werden samengevoegd. Sinds het vroege begin van de 13e eeuw werden al deze boeken — op een paar korte na — verder onderverdeeld in hoofdstukken die elk ongeveer één pagina lang zijn. Sinds het midden van de 16e eeuw wordt elk hoofdstuk verder onderverdeeld in verzen van een paar korte regels of zinnen lang. Soms werd een lange zin opgedeeld in verschillende verzen — zoals bijvoorbeeld in Efeziërs 4:1-3 — en soms vormen meerdere korte zinnen één enkel vers — zoals bijvoorbeeld in Genesis 1:2. De gebruikelijke manier om naar een bijbelcitaat te verwijzen is met de naam van het boek, het volgnummer van het hoofdstuk en het volgnummer van het vers. Zo staat Genesis 3:5 bijvoorbeeld voor een fragment uit het boek Genesis, hoofdstuk 3, vers 5.
We geven je een tekstbestand bijbel.txt1, die de volledige (Engelse) tekst van de Bijbel bevat in het volgende formaat:
*** Genesis ***
1:1 In the beginning God created the heaven and the earth.
1:2 And the earth was without form, and void; and darkness was upon the face of
the deep. And the Spirit of God moved upon the face of the waters.
*** Exodus ***
1:1 Now these are the names of the children of Israel, which came into Egypt;
every man and his household came with Jacob.
1:2 Reuben, Simeon, Levi, and Judah,
Deze tekst bestaat uit een aantal opeenvolgende fragmenten. Hierbij bestaat elk fragment uit één of meer opeenvolgende regels en worden de verschillende fragmenten van elkaar gescheiden door minstens één lege regel. Fragmenten die de start van een nieuw bijbelboek aanduiden, beginnen en eindigen met drie sterretjes, met daartussen de naam van het boek (met een extra spatie voor en achter de naam). Alle andere fragmenten stellen de opeenvolgende bijbelverzen voor. Een bijbelvers begint steeds met $$h:v$$ en een spatie, waarbij $$h \in \mathbb{N}_0$$ het volgnummer van een hoofdstuk aanduidt, en $$v \in \mathbb{N}_0$$ het volgnummer van een vers.
Schrijf een functie verzen waaraan de naam van een tekstbestand moet doorgegeven worden. Dit tekstbestand moet de tekst van de Bijbel bevatten, in het formaat dat hierboven werd beschreven. De functie moet een dictionary teruggeven, die alle verzen uit het bestand afbeeldt op hun corresponderende tekst. De sleutels van deze dictionary zijn strings met formaat boek hoofdstuk:vers, en worden afgebeeld op de tekst uit de Bijbel van het vers met volgnummer vers, uit het hoofdstuk met volgnummer hoofdstuk, uit het boek met naam boek. De tekst van een vers wordt gevormd door alle regels waaruit het vers bestaat achter elkaar te zetten, van elkaar gescheiden door één enkele spatie. Vóór het samenvoegen van de regels dient eerst eventuele witruimte vooraan en achteraan de regel verwijderd te worden.
Bij onderstaande voorbeeldsessie gaan we ervan uit dat het tekstbestand bijbel.txt2 zich in de huidige directory bevindt.
>>> index = verzen('bijbel.txt')
>>> index['Revelation 3:20']
'Behold, I stand at the door, and knock: if any man hear my voice, and open the door, I will come in to him, and will sup with him, and he with me.'
>>> index['Genesis 3:10']
'And he said, I heard thy voice in the garden, and I was afraid, because I was naked; and I hid myself.'