Lab 2: Scrabble
Labs are practice problems completed in your section, assessed on completion only. You are encouraged to collaborate with classmates on this lab!
Determine which of two Scrabble words is worth more.
$ ./scrabble
Player 1: COMPUTER
Player 2: science
Player 1 wins!
Accepting this Lab
- Accept this lab via GitHub Classroom.
- After about a minute, refresh the page and ensure you see “You’re ready to go!”.
Getting Started
Log into code.cs50.io, click on your terminal window, and execute cd
by itself. You should find that your terminal window’s prompt resembles the below:
$
Next execute
get50 scrabble
in order to download a directory called scrabble
into your codespace.
Then execute
cd scrabble
in order to change into that directory. Your prompt should now resemble the below:
scrabble/ $
Execute ls
by itself, and you should see a file called scrabble.c
. Open that file by executing the below:
code scrabble.c
If you run into any trouble, follow these same steps steps again and see if you can determine where you went wrong!
Background
In the game of Scrabble, players create words to score points, and the number of points is the sum of the point values of each letter in the word.
A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 3 | 3 | 2 | 1 | 4 | 2 | 4 | 1 | 8 | 5 | 1 | 3 | 1 | 1 | 3 | 10 | 1 | 1 | 1 | 1 | 4 | 4 | 8 | 4 | 10 |
For example, if we wanted to score the word Code
, we would note that in general Scrabble rules, the C
is worth 3
points, the o
is worth 1
point, the d
is worth 2
points, and the e
is worth 1
point. Summing these, we get that Code
is worth 3 + 1 + 2 + 1 = 7
points.
Implementation Details
Complete the implementation of scrabble.c
, such that it determines the winner of a short scrabble-like game, where two players each enter their word, and the higher scoring player wins.
- Notice that we’ve stored the point values of each letter of the alphabet in an integer array named
POINTS
.- For example,
A
ora
is worth 1 point (represented byPOINTS[0]
),B
orb
is worth 3 points (represented byPOINTS[1]
), etc.
- For example,
- Notice that we’ve created a prototype for a helper function called
compute_score()
that takes a string as input and returns anint
. Whenever we would like to assign point values to a particular word, we can call this function. Note that this prototype is required for C to know thatcompute_score()
exists later in the program. - In
main()
, the program prompts the two players for their words using theget_string()
function. These values are stored inside variables namedword1
andword2
. - In
compute_score()
, your program should compute, using thePOINTS
array, and return the score for the string argument. Characters that are not letters should be given zero points, and uppercase and lowercase letters should be given the same point values.- For example,
!
is worth0
points whileA
anda
are both worth1
point. - Though Scrabble rules normally require that a word be in the dictionary, no need to check for that in this problem!
- For example,
- In
main()
, your program should print, depending on the players’ scores,Player 1 wins!
,Player 2 wins!
, orTie!
.
Hints
-
You may find the functions
isupper()
andislower()
to be helpful to you. These functions take in a character as the argument and return a boolean. -
To find the value at the
n
th index of an array calledarr
, we can writearr[n]
. We can apply this to strings as well, as strings are arrays of characters. -
Recall that computers represent characters using ASCII, a standard that represents each character as a number.
How to Test Your Code
Your program should behave per the examples below.
$ ./scrabble
Player 1: Question?
Player 2: Question!
Tie!
$ ./scrabble
Player 1: Oh,
Player 2: hai!
Player 2 wins!
$ ./scrabble
Player 1: COMPUTER
Player 2: science
Player 1 wins!
$ ./scrabble
Player 1: Scrabble
Player 2: wiNNeR
Player 1 wins!
Execute the below to evaluate the correctness of your code using check50
. But be sure to compile and test it yourself as well!
check50 cs50/labs/2021/fall/scrabble
Execute the below to evaluate the style of your code using style50
.
style50 scrabble.c
How to Submit
In your terminal, execute the below to submit your work.
submit50 scrabble
You may submit as many times as you would like up until the deadline. To confirm your submission, go to github.com/classroom50/scrabble-USERNAME where USERNAME
is your GitHub username. You should see the code from your latest submission.
Labs are assessed only on whether you’ve submitted an honest attempt, not the number of checks your submission passes.
Want to see the staff's solution?
#include <ctype.h>
#include <cs50.h>
#include <stdio.h>
#include <string.h>
// Points assigned to each letter of the alphabet
int POINTS[] = {1, 3, 3, 2, 1, 4, 2, 4, 1, 8, 5, 1, 3, 1, 1, 3, 10, 1, 1, 1, 1, 4, 4, 8, 4, 10};
int compute_score(string word);
int main(void)
{
// Get input words from both players
string word1 = get_string("Player 1: ");
string word2 = get_string("Player 2: ");
// Score both words
int score1 = compute_score(word1);
int score2 = compute_score(word2);
// Print the winner
if (score1 > score2)
{
printf("Player 1 wins!\n");
}
else if (score1 < score2)
{
printf("Player 2 wins!\n");
}
else
{
printf("Tie!\n");
}
}
int compute_score(string word)
{
// Keep track of score
int score = 0;
// Compute score for each character
for (int i = 0, len = strlen(word); i < len; i++)
{
if (isupper(word[i]))
{
score += POINTS[word[i] - 'A'];
}
else if (islower(word[i]))
{
score += POINTS[word[i] - 'a'];
}
}
return score;
}