Het dodedichtersgenootschap (Engels: Dead Poets Society1) is een Amerikaanse film uit 1989, geregisseerd door Peter Weir2 en naar een scenario van Tom Schulman3 dat gebaseerd was op zijn eigen schoolervaringen. De film speelt zich in 1959 af op de fictieve elitaire kostschool Welton Academy in de Amerikaanse staat Vermont, en vertelt het verhaal van een docent Engels die zijn studenten door het lezen van gedichten probeert te inspireren om vrijdenkers te worden.
De film werd genomineerd voor vier Golden Globe Awards4 (Beste Regisseur, Beste Dramafilm, Beste Rol in de Dramafilm en Beste Filmscript) maar kon geen enkele daarvan verzilveren. De film won wel de Academy Award5 voor beste originele scenario en verschillende andere internationale prijzen voor Beste Film en Beste Script, zoals de César6 voor beste buitenlandse film en de Joseph Plateauprijs7.
Een register is een tekstbestand waarvan elke regel een persoon beschrijft aan de hand van een vast aantal informatievelden. De velden worden van links naar rechts genummerd vanaf nul, worden van elkaar gescheiden door komma's (,) en bevatten zelf geen komma's. Het eerste veld bevat telkens de naam van de persoon, waarbij alle personen uit het bestand een unieke naam hebben. Dit zijn bijvoorbeeld enkele regels uit een register met informatie over dichters (dichters.txt8), met naast hun naam (veld 0) ook nog hun geboortedatum (veld 1) en hun sterfdatum (veld 2):
Thomas Chatterton,1752-11-20,1770-08-24 Phillis Wheatley,,1784-12-05 Percy Bysshe Shelley,1792-08-04,1822-07-08 John Keats,1795-10-31,1821-02-23 Emily Brontë,1818-07-30,1848-12-19 Walt Whitman,1819-05-31, Rupert Brooke,1887-08-03,1915-04-23 Guillaume Apollinaire,1880-08-26,1918-11-09 Wilfred Owen,1893-03-18,1918-11-04 Keith Douglas,1920-01-24,1944-06-09 Sylvia Plath,1932-10-27,1963-02-11
Een datumveld van een register bevat een datum in het formaat YYYY-MM-DD. Als er voor een bepaalde eigenschap van een persoon geen datum bekend is, dan blijft het corresponderende datumveld leeg.
Een register gebruikt de UTF-89 tekencodering. Bij het verwerken van dergelijke tekstbestanden kan je dus best de tekstcodering expliciet meegeven: encoding='utf-8'.
Gevraagd wordt:
Schrijf een functie lees_datums waaraan de locatie (str) van een register en het volgnummer $$n \in \mathbb{N}_0$$ (int) van een datumveld uit het register moeten doorgegeven worden. De functie moet een dictionary (dict) teruggeven die voor elke persoon uit het register waarvoor het datumveld $$n$$ niet leeg is, de naam (str) van de persoon afbeeldt op de corresponderende datum (datetime.date) uit het $$n$$-de veld voor die persoon.
Schrijf een functie levensjaren waaraan drie argumenten moeten doorgegeven worden: i) de naam (str) van een persoon, ii) een dictionary (dict) die namen (str) van personen afbeeldt op hun geboortedatum (datetime.date) en iii) een dictionary (dict) die namen (str) van personen afbeeldt op hun sterfdatum (datetime.date). Als zowel de geboortedatum als de sterfdatum van de persoon kan teruggevonden worden in de gegeven dictionaries, dan moet een lijst (list) teruggegeven worden met een reeks opeenvolgende jaartallen die begint bij het geboortejaar en eindigt bij het sterfjaar van de persoon. Anders moet een AssertionError opgeworpen worden met de boodschap ontbrekende informatie.
Schrijf een functie levend waaraan twee argumenten moeten doorgegeven worden: i) een dictionary (dict) die namen (str) van personen afbeeldt op hun geboortedatum (datetime.date) en ii) een dictionary (dict) die namen (str) van personen afbeeldt op hun sterfdatum (datetime.date). De functie moet een dictionary (dict) teruggeven die elk jaar (int) waarin minstens één persoon in leven was, afbeeldt op een verzameling (set) met de namen (str) van alle personen die dat jaar in leven waren (inclusief personen die in dat jaar geboren en/of gestorven zijn). In die dictionary worden enkel personen opgenomen waarvoor zowel het geboortejaar als het sterfjaar gekend zijn via de gegeven dictionaries.
Schrijf een functie wonderjaren waaraan een dictionary (dict) moet doorgegeven worden die jaartallen (int) afbeeldt op een verzameling (set) met namen (str) van personen die dat jaar in leven waren. De functie moet een verzameling (set) teruggeven met alle jaartallen (int) waarin het meeste personen in leven waren volgens de gegeven dictionary.
Schrijf een functie samengevat waaraan een collectie (list, tuple of set) met jaartallen (int) moet doorgegeven worden. De functie moet een verkorte notatie (str) van de jaartallen teruggeven, waarbij alle reeksen met twee of meer opeenvolgende jaartallen afgekort worden tot het eerste en het laatste jaartal van de reeks, van elkaar gescheiden door een koppelteken (-). Individuele jaartallen en reeksen opeenvolgende jaartallen worden in chronologische volgorde opgelijst, en van elkaar gescheiden door een komma (,) en een spatie. Zo wordt deze collectie jaartallen
2001, 2002, 2003, 2004, 2012, 2015, 2018, 2019, 2020, 2022
bijvoorbeeld in verkorte notatie geschreven als
2001-2004, 2012, 2015, 2018-2020, 2022
In onderstaande voorbeeldsessie gaan we ervan uit dat het tekstbestand dichters.txt10 zich in de huidige directory bevindt.
>>> geboren = lees_datums('dichters.txt11', 1)
>>> geboren['Emily Brontë']
datetime.date(1818, 7, 30)
>>> geboren['Walt Whitman']
datetime.date(1819, 5, 31)
>>> geboren['Phillis Wheatley']
Traceback (most recent call last):
KeyError: 'Phillis Wheatley'
>>> gestorven = lees_datums('dichters.txt12', 2)
>>> gestorven['Emily Brontë']
datetime.date(1848, 12, 19)
>>> gestorven['Walt Whitman']
Traceback (most recent call last):
KeyError: 'Walt Whitman'
>>> gestorven['Phillis Wheatley']
datetime.date(1784, 12, 5)
>>> levensjaren('Emily Brontë', geboren, gestorven)
[1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848]
>>> levensjaren('Walt Whitman', geboren, gestorven)
Traceback (most recent call last):
AssertionError: ontbrekende informatie
>>> levensjaren('Phillis Wheatley', geboren, gestorven)
Traceback (most recent call last):
AssertionError: ontbrekende informatie
>>> dichters = levend(geboren, gestorven)
>>> dichters[1798]
{'John Keats', 'Percy Bysshe Shelley'}
>>> dichters[1895]
{'Guillaume Apollinaire', 'Rupert Brooke', 'Wilfred Owen'}
>>> dichters[1952]
{'Sylvia Plath'}
>>> wonderjaren(dichters)
{1818, 1819, 1820, 1821, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915}
>>> samengevat({2001, 2002, 2003, 2004, 2012, 2015, 2018, 2019, 2020, 2022})
'2001-2004, 2012, 2015, 2018-2020, 2022'
>>> samengevat(levensjaren('Emily Brontë', geboren, gestorven))
'1818-1848'
>>> samengevat(wonderjaren(dichters))
'1818-1821, 1893-1915'
Een van de functies uit deze opgave is een verwijzing naar The Wonder Years13. Deze televisieserie werd gedurende 6 seizoenen (van 1988 tot 1993) uitgezonden door de Amerikaanse zender ABC14. Begin jaren '90 werd ze ook in Vlaanderen integraal uitgezonden door de openbare omroep VRT15 en in Nederland door de VPRO16.
De televisieserie behandelde de sociale en historische gebeurtenissen eind jaren zestig en begin jaren zeventig, gezien door de ogen van de 12-jarige Kevin Arnold. Naast de gebruikelijke puberale kwaaltjes, ontfermde hij zich over allerlei tiener-sociale zaken. Zijn beste vriend Paul en het overbuurmeisje Winnie Cooper waren zijn vaste metgezellen. Elke episode wordt aan elkaar verteld door een inmiddels volwassen Kevin Arnold die terugblikt op zijn jeugdjaren en zo zijn diepste zielsroerselen van zijn "wonderjaren" met de kijker deelt. De titelsong was Joe Cocker17s' versie van het nummer With a Little Help from My Friends18 van de The Beatles19.