This week's tutorial is the first to make use of unbounded data in Scheme (using lists). We will also be using some starter code (t5-starter.scm) for the first time. This should allow us to get a little more done by having some function and data definitions given beforehand. The material here comes from lecture module 5 of the course notes.
Before beginning, examine the starter code given. The struct
team holds the name of a team and the number of wins and losses that team has (assume the rules of the sport don't allow ties to occur). Read the comments for the function
win-pct so that you know what it does and how it works.
Write a function
games-played which consumes a (possibly empty) list of teams and produces the total number of games played by all teams. This sum should include all repeats (that is, ignore the fact that one team's win is likely another team's loss).
Given a list of team names (strings), write a function
names->teams that produces a list of teams corresponding to the names, all with blank records (i.e. no wins and no losses).
Since we are only counting the number of wins and losses, we can completely describe the outcome of a game just by giving the name of the team that won and the name of the one that lost.
So write a function
add-game that consumes two strings for the name of the winning and losing teams (respectively), as well as a list of teams, and produces a new list of teams with the records of the winning and losing teams updated appropriately. You may assume that there is a team in the given list with each of the given names.
We say a team has a winning record if its win percentage (as computed by the
win-pct function) is strictly greater than 1/2. Note that at least one, but not all, of the teams in a single league can have a winning record.
Write a function
winning-teams that consumes a list of teams and produces a list of the names of the teams with winning records.
When two teams become entrenched in a bitter and long-standing rivalry, sometimes their fans care most about which team is doing better rather than their team's overall success.
In order to assist such fans, write a function
rival-winner that consumes the names of two rival teams, and a list of teams (which includes the two named ones) and produces the name of the team out of the two with the higher win percentage.
The following problem is a bit more complex than the previous ones, and will probably require at least one or two helper functions. So use the design recipe, think and plan carefully!
Given a list of teams, we want to determine whether the teams could form a closed league --- that is, they have only played each other. Note that this is the case if and only if the following two conditions are met:
So write a function
same-league? which consumes a list of teams and produces true iff the given records could have been accumulated just from the teams playing each other.
Now that we've had a little over a month of CS 135, including assignments, tutorials, lectures, and an exam, you've probably formed some opinions about various aspects of the course. And it's still early enough that we might be able to change some things to help you learn better.
So we'd like you all to take this little survey. You don't need give your name or any identifying information, and the survey is completely optional as well. In fact, this has NOT been cleared by the office of ethics, so if that makes you uncomfortable, please don't feel pressured to participate.
But thanks very much for those who do choose to participate! We will read all of your responses, and if there is any particular issue that receives widespread attention, we may make some changes to address the concern.