PROG0472 - Chapter and verse

no tags 

While he was doing his round with his parishioners on Saturday afternoon, the new pastor of a village stood in front of a closed door of a house. There was obviously someone at home, but although he repeatedly knocked on the door, no one answered. Without delay he finally took one of his cards out, wrote Revelation 3:20 on the back and shoved it under the door.

After Sunday mass, he found his name card in the collection basket. Under his own handwriting someone else had written Genesis 3:10.
Openbaring 3:20
Revelation 3:20.
Genesis 3:10
Genesis 3:10.

Assignment

The Bible is a compilation of several shorter books that were written independently and over different periods, and were joined later. Since the early years of the 13th century, all of these books were - except a few short ones - further divided into chapters, each about one page long. Since the mid-16th century, each chapter is further divided into verses of a few short lines or sentences long. Sometimes a long sentence was divided into verses - such as in Ephesians 4:1-3 - and sometimes multiple short sentences form a single verse - for example, in Genesis 1:2. The usual way to refer to a bible quote is with the name of the book, the number of the chapter and the number of the verse. So Genesis 3:5 is, for example, an excerpt from the book of Genesis, chapter 3, verse 5.

We give you a text file bible.txt that contains the full English text of the Bible the following format:
*** 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,

This text consists of a sequence of fragments.Each fragment consists of one or more consecutive lines and the different fragments are separated from each other by at least one blank line. Fragments that indicate the start of a new book, begin and end with three asterisks surrounding the name of the book (with an extra space before and after the name). All other fragments represent successive Bible verses. A Bible verse always begins with $h:v$ and a space, where $h \in \mathbb{N}_0$ indicates the number of the chapter, and $v \in \mathbb{N}_0$ the number of a verse.

Write a function verses to which the name of a text file is to be passed. This text file should contain the text of the Bible, in the format described above. The function must return a dictionary that depicts all verses from the file on their corresponding text. The keys of this dictionary are strings with the format book chapter:verse, and are displayed on the text of the Bible verse with the verse number verse, from the chapter with the number chapter, from the book with the name book. The text of a verse is formed by putting all the lines from which it consists after each other, separated by a single space. Before combining the lines, any white space in the beginning and the end of the lines must first be removed.

Example

In the following example session we assume that the file bible.txt is in the current directory.

>>> index = verses('bible.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.'

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.

Openbaring 3:20
Openbaring 3:20.
Genesis 3:10
Genesis 3:10.

Opgave

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.txt, 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.

Voorbeeld

Bij onderstaande voorbeeldsessie gaan we ervan uit dat het tekstbestand bijbel.txt 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.'


Added by:Peter Dawyndt
Date:2014-04-11
Time limit:10s
Source limit:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Languages:PY_NBC
Resource:None