Q2: A Bard Day’s Night
Background
Once upon a time, in a certain medieval village, a group of
mysterious strangers appeared in jeans and T-shirts. The strangers
managed to learn enough Old English to explain that they had been
enjoying their favourite pastime – belting out tunes at a karaoke
party – when they saw a blinding flash and heard a thunderous roar,
lost consciousness, and found themselves transported back in time
without any explanation.
Of all their bizarre story, the villagers were most interested
in the strangers’ wide-ranging knowledge of popular songs from
their own time. They understood that the strangers belonged to some
sort of bard class. The villagers were also party animals, and had
a feast every night. The bards agreed to come to some of the
parties and sing one Billboard Top 40 song whenever they did. When
they weren’t there, the villagers would sing these songs to each
other, reverently, knowing that they held clues to the future of
their world. The more they learned, the more they were able to
share, and some were even initiated into the mysterious strangers’
inner circle and allowed to become bards and learn all the secrets
of the 21st-century pop music scene. The village chronicler wrote
down the most important things they learned from these portentous
events.
Your task
Simulate the above village with its nightly parties.
You’ll be given a list of villagers and bards. You’ll also get a
list of songs. The bards start out knowing every song, but no one
else knows any songs.
You’ll be given a list of parties with their attendees, in the
order that the parties are held. Every party features singing.
There are two ways a party can unfold:
Either way, whenever a song is sung, everyone at the party
learns and remembers it.
If a villager learns enough songs, and they’re at a party with a
bard, they too become a bard and learn every song.
Finally, you’ll calculate some statistics about the
simulation.
Technical details
Input
Each test case is one input file. Here’s a sample input
file:
Villagers with an asterisk * after their name are
bards. However, the asterisk isn’t part of their name – notice
there are no asterisks in the party list.
Of course, there may be any number of villagers, bards, songs,
and parties.
Walkthrough of the above example
The first party has a bard, Dan. He sings Call Me Maybe (the
first alphabetical song that no one knows). At the next party,
there’s no bard, but Arnold and Freddie teach Call Me Maybe to
Luke. At the third party, Dan the bard is back. Since Luke already
knows Call Me Maybe, Dan debuts Delete Forever next. At the fourth
party, Luke teaches Freddie and Arnold Delete Forever. If the
threshold to become a bard was 2, Luke would have qualified to
be a bard after the third party, and Freddie and Arnold after the
fourth party.
Statistics
After the simulation, you will prepare and return these stats on
your village’s parties:
Starter code
Please find your starter code and test examples in MarkUs.
In bard.py, you’ll find functions marked
with TODO whose implementations you must complete.
You also have a couple of import statements to make
the type annotations work and constants for the number of songs a
villager must know to become a bard and the number of Billboard Top
songs.
Take some time to read over the starter code to understand the
structure, as well as the functions you’ve been given and the
functions you must write.
Testing
We have a thorough set of tests on which we’ll run your code.
Everything we’ll test has been discussed here and in the starter
code, so please read both carefully!
The starter code has some tests, including one holistic test
(the statistics you should output for the sample given above),
which you can try out by running test_bard.py.
F.A.Q.
Can there be duplicate villager names or song
names?
No.
What happens if there are multiple bards at a
party?
Only one of them sings. It doesn’t matter which one, since they
would all choose the same next song.
What happens if there are only bards at a
party?
Whether anyone sings or not makes no difference since all the bards
already know all the songs.
What happens if there are no new songs for a bard to
sing?
The party is boring. No one sings. Nothing changes.
What happens if a party has no bard, but during the
party a villager learns enough songs to become one?
A villager can only become a bard at a party that already has a
bard, so this can’t happen. A party either has a bard at the
beginning or doesn’t, and a party’s status never changes once it’s
begun.
If there’s a party where a villager learns enough songs
to become a bard but there isn’t a bard at the party, do they miss
their chance?
No, they become a bard at the next party they attend where there’s
a bard (if they ever attend such a party).
Sets
One of the concepts you’ll be practicing throughout this
assignment is sets.
A set is very much like a list, with a few differences:
Sets have their own set of operations as described
in set theory. You may find set union and set
difference useful and, in general, you will find sets a valuable
tool throughout this assignment.
Important Reminders
Q2: A Bard Day’s Night Background Once upon a time, in a certain medieval village, a group of mysterious strangers appea
-
- Site Admin
- Posts: 899603
- Joined: Mon Aug 02, 2021 8:13 am