PROG0470 - Showoff

no tags 

There are twelve people that have won four big yearly American entertainment prizex: Emmy, Grammy, Oscar en Tony. Winning these four awards is also called EGOT (or sometimes GATE, since the official name of an Oscar is actually an Academy Award) or the Grand Slam of showbiz. These awards honor excellent performances on the fields of television, music (or other audio-recordings), film and theater.

name EGOT completed Emmy Grammy Oscar Tony
Richard Rodgers 1962 (17 jaar) 1962 1960 1945 1950
Helen Hayes 1977 (45 jaar) 1953 1977 1932 1947
Rita Moreno 1977 (16 jaar) 1977 1972 1961 1975
John Gielgud 1991 (30 jaar) 1991 1979 1981 1961
Audrey Hepburn 1994 (41 jaar) 1993 1994 1953 1954
Marvin Hamlisch 1995 (23 jaar) 1995 1974 1973 1976
Jonathan Tunick 1997 (20 jaar) 1982 1988 1977 1997
Mel Brooks 2001 (34 jaar) 1967 1998 1968 2001
Mike Nichols 2001 (40 jaar) 2001 1961 1967 1964
Whoopi Goldberg 2002 (17 jaar) 2002 1985 1990 2002
Scott Rudin 2012 (28 jaar) 1984 2012 2007 1994
Robert Lopez 2014 (10 jaar) 2008 2012 2014 2004

The acronym EGOT was used for the first time by actor Philip Michael Thomas when he revealed his ambition to win these four awards. Until today, however, he was never nominated for either of these awards, but he did win a People's Choice Award and he was nominated for the Golden Globe. Three other persons — Barbra Streisand, Liza Minelli and James Earl Jones — have won these four awards, but one of them was granted outside of the competition as a kind of honour (Streisand's Tony, Minnelli's Grammy and Jones' Oscar). From the twelve othe winners there are two — Marvin Hamlisch and Richard Rodgers — that have captured the Pulitzerprize.

The following persons each have won three of the four big entertainment awards in competitive categories. Winning three out of four awards is also called 3GOT (witticism to the term EGOT). The four possible combinations are called EGO, TOE, GOT and GET.

Assignment

  • Write a function grandslam to which a dictionary must be given, that portrays the name of a prize on a collection of names of the people who have won that prize. The function must print the names of the persons that have won all awards from the given dictionary.
  • Write a function showoff to which two arguments must be given: the name of a person and the dictionary that portrays a name of a prize on the names of the persons who have won that prize. The function must print a string that corresponds with one of the following classifications of the given person:
    • yep: the person has won all awards from the given dictionary
    • close (no prize): the person has won all awards except for one; the name of the prize the person has not (yet) won, must be printed in the place of prize in the string that is printed by the function.
    • nope: according to the given dictionary, the person has not (yet) won at least two awards out of four. 

Example

>>> awards = {
...    'Emmy':{'Audrey Hepburn', 'Cyndi Lauper', 'Ingrid Bergman', 'Marvin Hamlisch', 'Robin Williams'},
...    'Grammy':{'Audrey Hepburn', 'Cyndi Lauper', 'Elton John', 'Marvin Hamlisch', 'Robin Williams'},
...    'Oscar':{'Audrey Hepburn', 'Elton John', 'Ingrid Bergman', 'Marvin Hamlisch', 'Robin Williams'},
...    'Tony':{'Audrey Hepburn', 'Cyndi Lauper', 'Elton John', 'Ingrid Bergman', 'Marvin Hamlisch'}
... }

>>> grandslam(awards)
{'Audrey Hepburn', 'Marvin Hamlisch'}

>>> showoff('Audrey Hepburn', awards)
'yep'
>>> showoff('Elton John', awards)
'close (no Emmy)'
>>> showoff('Ingrid Bergman', awards)
'close (no Grammy)'
>>> showoff('Philip Michael Thomas', awards)
'nope'

>>> awards = {
...    'Emmy':{'Audrey Hepburn', 'Cyndi Lauper', 'Ingrid Bergman', 'Marvin Hamlisch', 'Robin Williams'},
...    'Grammy':{'Audrey Hepburn', 'Cyndi Lauper', 'Elton John', 'Marvin Hamlisch', 'Robin Williams'},
...    'Oscar':{'Audrey Hepburn', 'Elton John', 'Ingrid Bergman', 'Marvin Hamlisch', 'Robin Williams'},
...    'Tony':{'Audrey Hepburn', 'Cyndi Lauper', 'Elton John', 'Ingrid Bergman', 'Marvin Hamlisch'},
...    'Pulitzer':{'Marvin Hamlisch', 'Richard Rodgers'}
... }

>>> grandslam(awards)
{'Marvin Hamlisch'}

>>> showoff('Marvin Hamlisch', awards)
'yep'
>>> showoff('Audrey Hepburn', awards)
'close (no Pulitzer)'
>>> showoff('Elton John', awards)
'nope'

Er zijn twaalf mensen die de vier grote jaarlijkse Amerikaanse entertainmentprijzen gewonnen hebben: Emmy, Grammy, Oscar en Tony. Het winnen van deze vier prijzen wordt afgekort als EGOT (of soms als GATE als men de officiële naam Academy Award gebruikt voor de Oscar) en met spreekt ook van de Grand Slam van de showbusiness. Deze prijzen eren uitstekende prestaties op gebied van televisie, muziek (of andere audio-opnames), film en theater.

naam EGOT voltooid Emmy Grammy Oscar Tony
Richard Rodgers 1962 (17 jaar) 1962 1960 1945 1950
Helen Hayes 1977 (45 jaar) 1953 1977 1932 1947
Rita Moreno 1977 (16 jaar) 1977 1972 1961 1975
John Gielgud 1991 (30 jaar) 1991 1979 1981 1961
Audrey Hepburn 1994 (41 jaar) 1993 1994 1953 1954
Marvin Hamlisch 1995 (23 jaar) 1995 1974 1973 1976
Jonathan Tunick 1997 (20 jaar) 1982 1988 1977 1997
Mel Brooks 2001 (34 jaar) 1967 1998 1968 2001
Mike Nichols 2001 (40 jaar) 2001 1961 1967 1964
Whoopi Goldberg 2002 (17 jaar) 2002 1985 1990 2002
Scott Rudin 2012 (28 jaar) 1984 2012 2007 1994
Robert Lopez 2014 (10 jaar) 2008 2012 2014 2004

Het acroniem EGOT werd voor het eerst gebruikt door acteur Philip Michael Thomas toen hij onthulde dat hij de ambitie had om deze vier prijzen te winnen. Tot op heden werd hij echter nog voor geen enkele van de prijzen genomineerd, maar hij won wel een People's Choice Award en een nominatie voor de Golden Globe. Drie andere personen — Barbra Streisand, Liza Minelli en James Earl Jones — hebben ook de vier prijzen gewonnen, maar één daarvan werd buiten competitie uitgereikt als een soort ere-onderscheiding (Streisand's Tony, Minnelli's Grammy en Jones' Oscar). Van de twaalf winnaars zijn er ook nog twee — Marvin Hamlisch and Richard Rodgers — die de Pulitzerprijs in de wacht gesleept hebben.

De volgende personen hebben elk drie van de vier grote entertainmentprijzen gewonnen in competitieve categorieën. Het winnen van drie van de vier prijzen wordt ook wel eens 3GOT genoemd (kwinkslag naar de term EGOT), waarbij de vier combinaties afzonderlijk benoemd worden als EGO, TOE, GOT en GET.

Opgave

  • Schrijf een functie grandslam waaraan een dictionary moet doorgegeven worden, die telkens de naam van een prijs afbeeldt op een verzameling van de namen van personen die de prijs gewonnen hebben. De functie moet een verzameling teruggeven met de namen van personen die alle prijzen uit de gegeven dictionary gewonnen hebben.
  • Schrijf een functie uitslover waaraan twee argumenten moeten doorgegeven worden: de naam van een persoon en een dictionary die telkens de naam van een prijs afbeeldt op een verzameling van de namen van personen die de prijs gewonnen hebben. De functie moet een string teruggeven die overeenkomt met één van de volgende classificaties van de gegeven persoon:
    • ja: de persoon heeft alle prijzen gewonnen uit de gegeven dictionary
    • bijna (geen prijs): de persoon heeft op één na alle prijzen gewonnen uit de gegeven dictionary; de naam van de prijs die de persoon (nog) niet gewonnen heeft, moet ingevuld worden op de plaats van prijs in de string die door de functie teruggegeven wordt
    • neen: volgens de gegeven dictionary heeft de persoon minstens twee prijzen (nog) niet gewonnen

Voorbeeld

>>> prijzen = {
...    'Emmy':{'Audrey Hepburn', 'Cyndi Lauper', 'Ingrid Bergman', 'Marvin Hamlisch', 'Robin Williams'},
...    'Grammy':{'Audrey Hepburn', 'Cyndi Lauper', 'Elton John', 'Marvin Hamlisch', 'Robin Williams'},
...    'Oscar':{'Audrey Hepburn', 'Elton John', 'Ingrid Bergman', 'Marvin Hamlisch', 'Robin Williams'},
...    'Tony':{'Audrey Hepburn', 'Cyndi Lauper', 'Elton John', 'Ingrid Bergman', 'Marvin Hamlisch'}
... }

>>> grandslam(prijzen)
{'Audrey Hepburn', 'Marvin Hamlisch'}

>>> uitslover('Audrey Hepburn', prijzen)
'ja'
>>> uitslover('Elton John', prijzen)
'bijna (geen Emmy)'
>>> uitslover('Ingrid Bergman', prijzen)
'bijna (geen Grammy)'
>>> uitslover('Philip Michael Thomas', prijzen)
'neen'

>>> prijzen = {
...    'Emmy':{'Audrey Hepburn', 'Cyndi Lauper', 'Ingrid Bergman', 'Marvin Hamlisch', 'Robin Williams'},
...    'Grammy':{'Audrey Hepburn', 'Cyndi Lauper', 'Elton John', 'Marvin Hamlisch', 'Robin Williams'},
...    'Oscar':{'Audrey Hepburn', 'Elton John', 'Ingrid Bergman', 'Marvin Hamlisch', 'Robin Williams'},
...    'Tony':{'Audrey Hepburn', 'Cyndi Lauper', 'Elton John', 'Ingrid Bergman', 'Marvin Hamlisch'},
...    'Pulitzer':{'Marvin Hamlisch', 'Richard Rodgers'}
... }

>>> grandslam(prijzen)
{'Marvin Hamlisch'}

>>> uitslover('Marvin Hamlisch', prijzen)
'ja'
>>> uitslover('Audrey Hepburn', prijzen)
'bijna (geen Pulitzer)'
>>> uitslover('Elton John', prijzen)
'neen'


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