PROG0173 - Nobel prizes

no tags 

The Nobel Prize is a set of annual international awards bestowed in a number of categories by Swedish and Norwegian committees in recognition of cultural and/or scientific advances. The will of the Swedish inventor Alfred Nobel established the prizes in 1895. The prizes in Physics, Chemistry, Physiology or Medicine, Literature, and Peace were first awarded in 1901. The related Nobel Memorial Prize in Economic Sciences was created in 1968. Although the prize money is not an insignificant amount, the prestige and recognition that comes from winning a Nobel prize is the major reward for most winners.

There is no Nobel Prize for mathematics, and there is still speculation about why Alfred Nobel took no nottice of the discipline. A popular story is that Nobel wanted to prevent a famous mathematician (Gosta Mittag-Leffler) from getting the prize, because he is said to have had an affair with a woman with whom Nobel maintained relationships. More likely explanations are that Nobel did not see mathematics as a practical science that would have a lot of significance for mankind and the fact that there was already another prestigious mathematics prize in Scandinavia, with which he did not want to compete.

Young mathematicians can instead strive for a Fields Medal (maximum age: 40) and in 2002 the Abel Prize for mathematics was created as well. The latter is named after the Norwegian mathematician Niels Henrik Abel, and is awarded by the King of Norway. The Abel Prize has quickly positioned itself- both in terms of prize money and status - as a worthy substitute for the missing "Nobel Prize for mathematics." The Turing Award is considered the highest prize in computer science, named after the British mathematician Alan Turing.

Assignment

For this assignment we work with the CSV file prizes.csv, that contains a list of the winners of the Nobel Prize, the Abel Prize and the Turing Award. The fields of the record respectively mention the kind of prize (prize), the discipline (discipline) and the year (year) in which the prize was awarded, the name and nationality of the laureate (laureate), and a short motivation that was spoken when the prize was awarded (motivation). For prizes which were awarded to multiple people, the names and nationalities of all laureates are summed up, separated by commas. The name of a laureate is always followed by his or her nationality between brackets. The fields in this CSV file are always separated by a semicolon (;).

We ask you to write a function prizes, that can be used to print a number of prizes from the CSV file that meet a series of predetermined criteria. The location of the CSV file must be passed to the function as an obligatory argument. Moreover, the function has a series of criteria that determine which prizes should be printed:

  • prize (str): prize must belong to the given kind (Nobel Prize, Abel Prize or Turing Award)
  • discipline (str): prize in a given discipline
  • year (int): prize in a given year
  • nationality (str): at least one of the laureates had the given nationality
  • laureates (int): the number of laureates equals the given number
  • motivation (str): motivation of the prize contains the text fragment that was passed to the argument

For each prize that meets the above criteria, the kind of prize must be printed, followed by the text " in ", the discipline with a capital letter , another space and the year between brackets. Then a colon follows, a space and the names of the laureates as given in the CSV file. When printing the fields, spaces in the beginning and the end should be deleted. The original order in which the prizes are listed in the given CSV file must be maintained when printing. With criteria in which a comparison between strings has to be made, no attention should be paid to capitals.

Example

In the following example session we assume that the CSV file prizes.csv is in the current directory.

>>> prizes('prizes.csv', prize='nobelprize', year=1994)
Nobel Prize in Economics (1994): John Harsanyi (US), John Forbes Nash (US), Reinhard Selten (Ger)
Nobel Prize in Medicine (1994): Alfred G. Gilman (US), Martin Rodbell (US)
Nobel Prize in Literature (1994): Kenzaburo Oë (Jap)
Nobel Prize in Physics (1994): Bertram Neville Brockhouse (Can)
Nobel Prize in Physics (1994): Clifford Glenwood Shull (US)
Nobel Prize in Chemistry (1994): George Andrew Olah (US)
Nobel Peace Prize (1994): Yasser Arafat (Pal), Shimon Peres (Isr), Yitzhak Rabin (Isr)
>>> prizes('prizes.csv', prize='nobelprize', discipline='mathematics')
>>> prizes('prizes.csv', nationality='bel')
Nobel Peace Prize (1904): Institut the Droit International (Bel)
Nobel Peace Prize (1909): Auguste Beernaert (Bel)
Nobel Prize in Literature (1911): Maurice Maeterlinck (Bel)
Nobel Peace Prize (1913): Henri La Fontaine (Bel)
Nobel Prize in Medicine (1919): Jules Bordet (Bel)
Nobel Prize in Medicine (1938): Corneille Jean François Heymans (Bel)
Nobel Peace Prize (1958): Georges Pire (Bel)
Nobel Prize in Medicine (1974): Albert Claude (Bel), Christian the Duve (Bel), George E. Palade (Rom)
Nobel Prize in Chemistry (1977): Ilya Prigogine (Bel)
Nobel Peace Prize (1999): Artsen zonder Grenzen (Bel)
Abel Prize in Mathematics (2008): John G. Thompson (US), Jacques Tits (Bel)
>>> prizes('prizes.csv', discipline='chemistry', laureates=3)
Nobel Prize in Chemistry (1967): Manfred Eigen (Ger), Ronald George Wreyford Norrish (GB), George Porter (GB)
Nobel Prize in Chemistry (1986): Dudley Robert Herschbach (US), Yuan Tseh Lee (US), John Charles Polanyi (Can)
Nobel Prize in Chemistry (1987): Donald James Cram (US), Jean-Marie Lehn (Fra), Charles John Pedersen (US)
Nobel Prize in Chemistry (1988): Johann Deisenhofer (Ger), Robert Huber (Ger), Hartmut Michel (Ger)
Nobel Prize in Chemistry (1995): Paul Josef Crutzen (Ned), Mario Jose Molina (US), Frank Sherwood Rowland (US)
Nobel Prize in Chemistry (1996): Robert Curl (US), Sir Harold Kroto (GB), Richard Smalley (US)
Nobel Prize in Chemistry (2000): Alan Jay Heeger (US), Alan Graham MacDiarmid (US/N-Z), Hideki Shirakawa (Jap)
Nobel Prize in Chemistry (2002): Kurt Wüthrich (Swi), John Bennett Fenn (US), Koichi Tanaka (Jap)
Nobel Prize in Chemistry (2004): Aaron Ciechanover (Isr), Avram Hershko (Isr), Irwin A. Rose (US)
Nobel Prize in Chemistry (2005): Robert Howard Grubbs (US), Richard Royce Shrock (US), Yves Chauvin (Fra)
>>> prizes('prizes.csv', motivation='röntgen', discipline='physics', nationality='GB')
Nobel Prize in Physics (1915): Sir William Henry Bragg (GB), William Lawrence Bragg (GB)
Nobel Prize in Physics (1917): Charles Glover Barkla (GB)

De Nobelprijs is een jaarlijkse geldprijs voor wetenschappers die een opmerkelijke prestatie hebben geleverd op het gebied van de natuurkunde, scheikunde, fysiologie of geneeskunde, literatuur en bevordering en behoud van de vrede. De prijs werd in 1901 bij testamentaire beschikking ingesteld door de schatrijke Zweedse industrieel Alfred Nobel. Sinds 1968 wordt er ook een Nobelprijs voor de economie uitgereikt. Hoewel het met de prijs verbonden bedrag niet onaanzienlijk is, is de prestige en erkenning die men door het winnen van een Nobelprijs krijgt voor de meeste winnaars de belangrijkste beloning.

Er bestaat geen Nobelprijs voor de wiskunde, en over de reden waarom die door Alfred Nobel over het hoofd werd gezien wordt nog steeds druk gespeculeerd. Een populair verhaal is dat Nobel wilde voorkomen dat een beroemd wiskundige (Gosta Mittag-Leffler) de prijs zou krijgen, omdat hij een affaire zou hebben met een vrouw met wie Nobel relaties onderhield. Meer waarschijnlijke verklaringen zijn dat Nobel de wiskunde niet zag als een praktische wetenschap waar de mensheid veel aan zou hebben, en het feit dat er al een andere prestigieuze wiskundeprijs in Scandinavië bestond, waar hij niet mee wilde concurreren.

Jonge wiskundigen kunnen in plaats daarvan dingen naar een Fields Medal (maximumleeftijd 40 jaar), en in 2002 werd ook de Abelprijs voor de wiskunde in het leven geroepen. Deze laatste is genoemd naar de Noorse wiskundige Niels Henrik Abel en wordt uitgereikt door de koning van Noorwegen. De Abelprijs heeft zich in korte tijd gepositioneerd — zowel qua prijzengeld als status — als waardige vervanger voor de ontbrekende "Nobelprijs voor de wiskunde". De Turing Award wordt beschouwd als de hoogste prijs binnen de informatica, genoemd naar de Britse wiskundige Alan Turing.

Opgave

Voor deze opgave werken we met het CSV bestand prijzen.csv, dat een lijst bevat van Nobelprijswinnaars, en winnaars van de Abelprijs en de Turing Award. De velden van elke record vermelden respectievelijk om welk soort prijs het gaat (prijs), de discipline (discipline) en het jaar (jaar) waarin de prijs werd uitgereikt, de naam en nationaliteit van de laureaat (laureaat), en een korte toelichting die bij de toekenning van de prijs werd uitgesproken (motivering). Voor prijzen die werden uitgereikt aan meerdere personen worden de namen en nationaliteiten van alle laureaten opgesomd, gescheiden door komma's. De naam van een laureaat wordt steeds gevolgd door zijn of haar nationaliteit tussen rond haakjes. De velden worden in dit CSV bestand telkens van elkaar gescheiden door een puntkomma (;).

We vragen je om een functie prijzen te schrijven, die kan gebruikt worden om een aantal prijzen uit het CSV bestand uit te schrijven die voldoen aan een reeks vooropgestelde criteria. De locatie van het CSV bestand moet als verplicht argument aan de functie doorgegeven worden. Daarnaast heeft de functie nog een reeks criteria die opleggen waaraan de prijzen moeten voldoen om uitgechreven te worden:

  • prijs (str): prijs moet tot opgegeven soort (nobelprijs, abelprijs of turing award) behoren
  • discipline (str): prijs werd in opgegeven discipline uitgereikt
  • jaar (int): prijs werd in opgegeven jaar uitgereikt
  • nationaliteit (str): minstens één van de laureaten had de opgegeven nationaliteit
  • laureaten (int): het aantal laureaten waaraan de prijs werd uitgereikt is gelijk aan het opgegeven aantal
  • motivering (str): motivering van de prijs bevat het tekstfragment dat aan dit argument werd doorgegeven

Voor elke prijs die aan bovenvernoemde criteria voldoet moet het soort prijs worden uitgeschreven, gevolgd door de tekst " voor de ", de discipline met een hoofdletter vooraan en de rest kleine letters, nog een spatie en het jaar tussen rond haken. Daarna volgt een dubbelpunt, een spatie en de namen van de laureaten zoals ze in het gegeven CSV bestand worden beschreven. Bij het uitschrijven van de velden moeten spaties vooraan en achteraan verwijderd worden. De oorspronkelijke volgorde waarmee de prijzen staan opgelijst in het gegeven CSV bestand moet bij het uischrijven behouden blijven. Bij criteria waarbij er een vergelijking tussen strings moet gemaakt worden, moet men geen onderscheid maken tussen hoofdletters en kleine letters.

Voorbeeld

In onderstaande voorbeeldsessie gaan we ervan uit dat het CSV-bestand prijzen.csv zich in de huidige directory bevindt.

>>> prijzen('prijzen.csv', prijs='nobelprijs', jaar=1994)
Nobelprijs voor de Economie (1994): John Harsanyi (VS), John Forbes Nash (VS), Reinhard Selten (Dui)
Nobelprijs voor de Geneeskunde (1994): Alfred G. Gilman (VS), Martin Rodbell (VS)
Nobelprijs voor de Literatuur (1994): Kenzaburo Oë (Jap)
Nobelprijs voor de Natuurkunde (1994): Bertram Neville Brockhouse (Can)
Nobelprijs voor de Natuurkunde (1994): Clifford Glenwood Shull (VS)
Nobelprijs voor de Scheikunde (1994): George Andrew Olah (VS)
Nobelprijs voor de Vrede (1994): Yasser Arafat (Pal), Shimon Peres (Isr), Yitzhak Rabin (Isr)
>>> prijzen('prijzen.csv', prijs='nobelprijs', discipline='wiskunde')
>>> prijzen('prijzen.csv', nationaliteit='bel')
Nobelprijs voor de Vrede (1904): Institut de Droit International (Bel)
Nobelprijs voor de Vrede (1909): Auguste Beernaert (Bel)
Nobelprijs voor de Literatuur (1911): Maurice Maeterlinck (Bel)
Nobelprijs voor de Vrede (1913): Henri La Fontaine (Bel)
Nobelprijs voor de Geneeskunde (1919): Jules Bordet (Bel)
Nobelprijs voor de Geneeskunde (1938): Corneille Jean François Heymans (Bel)
Nobelprijs voor de Vrede (1958): Georges Pire (Bel)
Nobelprijs voor de Geneeskunde (1974): Albert Claude (Bel), Christian de Duve (Bel), George E. Palade (Roe)
Nobelprijs voor de Scheikunde (1977): Ilya Prigogine (Bel)
Nobelprijs voor de Vrede (1999): Artsen zonder Grenzen (Bel)
Abelprijs voor de wiskunde (2008): John G. Thompson (VS), Jacques Tits (Bel)
>>> prijzen('prijzen.csv', discipline='scheikunde', laureaten=3)
Nobelprijs voor de Scheikunde (1967): Manfred Eigen (Dui), Ronald George Wreyford Norrish (GB), George Porter (GB)
Nobelprijs voor de Scheikunde (1986): Dudley Robert Herschbach (VS), Yuan Tseh Lee (VS), John Charles Polanyi (Can)
Nobelprijs voor de Scheikunde (1987): Donald James Cram (VS), Jean-Marie Lehn (Fra), Charles John Pedersen (VS)
Nobelprijs voor de Scheikunde (1988): Johann Deisenhofer (Dui), Robert Huber (Dui), Hartmut Michel (Dui)
Nobelprijs voor de Scheikunde (1995): Paul Josef Crutzen (Ned), Mario Jose Molina (VS), Frank Sherwood Rowland (VS)
Nobelprijs voor de Scheikunde (1996): Robert Curl (VS), Sir Harold Kroto (GB), Richard Smalley (VS)
Nobelprijs voor de Scheikunde (2000): Alan Jay Heeger (VS), Alan Graham MacDiarmid (VS/N-Z), Hideki Shirakawa (Jap)
Nobelprijs voor de Scheikunde (2002): Kurt Wüthrich (Zwi), John Bennett Fenn (VS), Koichi Tanaka (Jap)
Nobelprijs voor de Scheikunde (2004): Aaron Ciechanover (Isr), Avram Hershko (Isr), Irwin A. Rose (VS)
Nobelprijs voor de Scheikunde (2005): Robert Howard Grubbs (VS), Richard Royce Shrock (VS), Yves Chauvin (Fra)
>>> prijzen('prijzen.csv', motivering='röntgen', discipline='natuurkunde', nationaliteit='GB')
Nobelprijs voor de Natuurkunde (1915): Sir William Henry Bragg (GB), William Lawrence Bragg (GB)
Nobelprijs voor de Natuurkunde (1917): Charles Glover Barkla (GB)


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