#include <cs50.h>
#include <ctype.h>
#include <stdio.h>
float calc_hours(int hours[], int weeks, char output);
int main(void)
{
int weeks = get_int("Number of weeks taking CS50: ");
int hours[weeks];
for (int i = 0; i < weeks; i++)
{
hours[i] = get_int("Week %i HW Hours: ", i);
}
char output;
do
{
output = toupper(get_char("Enter T for total hours, A for average hours per week: "));
}
while (output != 'T' && output != 'A');
printf("%.1f hours\n", calc_hours(hours, weeks, output));
}
// TODO: complete the calc_hours function
float calc_hours(int hours[], int weeks, char output)
{
float num = 0;
if (output == 'T')
{
for (int i = 0; i < weeks; i++)
{
num += hours[i];
}
}
if (output == 'A')
{
for (int j = 0; j < weeks; j++)
{
num += hours[j];
}
num = num / weeks;
}
return num;
}
// Write a function to replace vowels with numbers
// Get practice with strings
// Get practice with command line
// Get practice with switch
#include <cs50.h>
#include <stdio.h>
#include <string.h>
char replace(char c);
int main(int argc, string argv[])
{
if (argc != 2)
{
printf("Usage: ./no-vowels word\n");
return 1;
}
int i = 0;
do
{
printf("%c", replace(argv[1][i]));
i++;
}
while (i < strlen(argv[1]));
printf("\n");
return 0;
}
char replace(char c)
{
switch (c)
{
case 'a':
return '6';
break;
case 'e':
return '3';
break;
case 'i':
return '1';
break;
case 'o':
return '0';
break;
default:
return c;
break;
}
}
// Check that a password has at least one lowercase letter, uppercase letter, number and symbol
// Practice iterating through a string
// Practice using the ctype library
#include <cs50.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>
bool valid(string password);
int main(void)
{
string password = get_string("Enter your password: ");
if (valid(password))
{
printf("Your password is valid!\n");
}
else
{
printf("Your password needs at least one uppercase letter, lowercase letter, number and symbol\n");
}
}
// TODO: Complete the Boolean function below
bool valid(string password)
{
bool upper = false, lower = false, number = false, symbol = false;
for (int i = 0, n = strlen(password); i < n; i++)
{
if (isupper(password[i]))
{
upper = true;
}
else if (islower(password[i]))
{
lower = true;
}
else if (isdigit(password[i]))
{
number = true;
}
else if (ispunct(password[i]))
{
symbol = true;
}
}
if (upper == true && lower == true && number == true && symbol == true)
{
return true;
}
else
{
return false;
}
}
#include <cs50.h>
#include <ctype.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);
// TODO: Print the winner
if (score1 > score2)
{
printf("Player 1 wins!");
}
else if (score1 < score2)
{
printf("Player 2 wins!");
}
else
{
printf("Tie!");
}
}
int compute_score(string word)
{
// TODO: Compute and return score for string
int score = 0;
for (int i = 0; i < strlen(word); i++)
{
if (islower(word[i]))
{
score += POINTS[word[i] - 97];
}
else if (isupper(word[i]))
{
score += POINTS[word[i] - 65];
}
}
return score;
}
#include <cs50.h>
#include <ctype.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
int count_letters(string text);
int count_words(string text);
int count_sentences(string text);
int main(void)
{
string text = get_string("Text: ");
int letters = count_letters(text);
int words = count_words(text);
int sentences = count_sentences(text);
float L = (float) letters / words * 100;
float S = (float) sentences / words * 100;
int index = round(0.0588 * L - 0.296 * S - 15.8);
if (index < 1)
{
printf("Before Grade 1\n");
}
else if (index >= 1 && index < 16)
{
printf("Grade %i\n", index);
}
else if (index >= 16)
{
printf("Grade 16+\n");
}
}
int count_letters(string text)
{
int all = strlen(text);
int letters = 0;
for (int i = 0; i < all; i++)
{
if (isalpha(text[i]))
{
letters += 1;
}
}
return letters;
}
int count_words(string text)
{
int all = strlen(text), words = 1;
for (int i = 0; i < all; i++)
{
if (isspace(text[i]))
{
words += 1;
}
}
return words;
}
int count_sentences(string text)
{
int all = strlen(text), sentences = 0;
for (int i = 0; i < all; i++)
{
if (text[i] == '.' || text[i] == '!' || text[i] == '?')
{
sentences += 1;
}
}
return sentences;
}
Wordle50, if feeling more comfortable:
#include <cs50.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
// each of our text files contains 1000 words
#define LISTSIZE 1000
// values for colors and score (EXACT == right letter, right place; CLOSE == right letter, wrong place; WRONG == wrong letter)
#define EXACT 2
#define CLOSE 1
#define WRONG 0
// ANSI color codes for boxed in letters
#define GREEN "\e[38;2;255;255;255;1m\e[48;2;106;170;100;1m"
#define YELLOW "\e[38;2;255;255;255;1m\e[48;2;201;180;88;1m"
#define RED "\e[38;2;255;255;255;1m\e[48;2;220;20;60;1m"
#define RESET "\e[0;39m"
// user-defined function prototypes
string get_guess(int wordsize);
int check_word(string guess, int wordsize, int status[], string choice);
void print_word(string guess, int wordsize, int status[]);
int main(int argc, string argv[])
{
// ensure proper usage
// TODO #1
int wordsize = 0;
if (argc != 2)
{
printf("Usage: ./wordle wordsize\n");
return 1;
}
// ensure argv[1] is either 5, 6, 7, or 8 and store that value in wordsize instead
// TODO #2
else if (argv[1][0] == '5' || argv[1][0] == '6' || argv[1][0] == '7' || argv[1][0] == '8')
{
wordsize = (int) argv[1][0] - '0';
}
else
{
printf("Error: wordsize must be either 5, 6, 7, or 8\n");
return 1;
}
// open correct file, each file has exactly LISTSIZE words
char wl_filename[6];
sprintf(wl_filename, "%i.txt", wordsize);
FILE *wordlist = fopen(wl_filename, "r");
if (wordlist == NULL)
{
printf("Error opening file %s.\n", wl_filename);
return 1;
}
// load word file into an array of size LISTSIZE
char options[LISTSIZE][wordsize + 1];
for (int i = 0; i < LISTSIZE; i++)
{
fscanf(wordlist, "%s", options[i]);
}
// pseudorandomly select a word for this game
srand(time(NULL));
string choice = options[rand() % LISTSIZE];
// allow one more guess than the length of the word
int guesses = wordsize + 1;
bool won = false;
// print greeting, using ANSI color codes to demonstrate
printf(GREEN "This is WORDLE50" RESET "\n");
printf("You have %i tries to guess the %i-letter word I'm thinking of\n", guesses, wordsize);
// main game loop, one iteration for each guess
for (int i = 0; i < guesses; i++)
{
// obtain user's guess
string guess = get_guess(wordsize);
// array to hold guess status, initially set to zero
int status[wordsize];
// set all elements of status array initially to 0, aka WRONG
// TODO #4
for (int j = 0; j < wordsize; j++)
{
status[j] = WRONG;
}
// Calculate score for the guess
int score = check_word(guess, wordsize, status, choice);
printf("Guess %i: ", i + 1);
// Print the guess
print_word(guess, wordsize, status);
// if they guessed it exactly right, set terminate loop
if (score == EXACT * wordsize)
{
won = true;
break;
}
}
// Print the game's result
// TODO #7
if (won)
{
printf("You won!\n");
}
else
{
printf("%s\n", choice);
}
// that's all folks!
return 0;
}
string get_guess(int wordsize)
{
string guess = "";
int number = 0;
// ensure users actually provide a guess that is the correct length
// TODO #3
do
{
guess = get_string("Input a %i-letter word: ", wordsize);
}
while (strlen(guess) != wordsize);
for (int i = 0; i < strlen(guess); i++)
{
if (isalnum(guess[i]) == 0)
{
get_guess(wordsize);
break;
}
else if (isdigit(guess[i]))
{
get_guess(wordsize);
break;
}
else if (isupper(guess[i]))
{
guess[i] = tolower(guess[i]);
}
}
return guess;
}
int check_word(string guess, int wordsize, int status[], string choice)
{
int score = 0;
// compare guess to choice and score points as appropriate, storing points in status
// TODO #5
// HINTS
// iterate over each letter of the guess
// iterate over each letter of the choice
// compare the current guess letter to the current choice letter
// if they're the same position in the word, score EXACT points (green) and break so you don't compare that letter further
// if it's in the word, but not the right spot, score CLOSE point (yellow)
// keep track of the total score by adding each individual letter's score from above
for (int i = 0; i < wordsize; i++)
{
char gu = guess[i];
if (guess[i] == choice[i])
{
status[i] = EXACT;
}
else
{
for (int j = 0; j < wordsize; j++)
{
if (status[j] != EXACT)
{
if (gu == choice[j])
{
status[i] = CLOSE;
}
}
}
}
}
for (int m = 0; m < wordsize; m++)
{
score += status[m];
}
return score;
}
void print_word(string guess, int wordsize, int status[])
{
// print word character-for-character with correct color coding, then reset terminal font to normal
// TODO #6
for (int i = 0; i < wordsize; i++)
{
if (status[i] == EXACT)
{
printf(GREEN "%c" RESET, guess[i]);
}
else if (status[i] == CLOSE)
{
printf(YELLOW "%c" RESET, guess[i]);
}
else
{
printf(RED "%c" RESET, guess[i]);
}
}
printf("\n");
return;
}