#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#define WORD_LENGTH 5
#define MAX_TRIES 6
#define CATEGORIES 3
#define WORDS_PER_CAT 5
/* ANSI colors */
#define GREEN "\033[1;32m"
#define YELLOW "\033[1;33m"
#define GRAY "\033[1;37m"
#define RESET "\033[0m"
int main( ) {
char categoryNames[ CATEGORIES] [ 20 ] = {
"Places" ,
"Animals" ,
"Objects"
} ;
char words[ CATEGORIES] [ WORDS_PER_CAT] [ WORD_LENGTH + 1 ] = {
{ "mecca" , "paris" , "milan" , "dubai" , "cairo" } ,
{ "tiger" , "horse" , "sheep" , "zebra" , "camel" } ,
{ "chair" , "table" , "phone" , "glass" , "clock" }
} ;
int catIndex
= rand ( ) % CATEGORIES
; char secret[ WORD_LENGTH + 1 ] ;
strcpy ( secret
, words
[ catIndex
] [ rand ( ) % WORDS_PER_CAT
] ) ;
char guesses[ MAX_TRIES] [ WORD_LENGTH + 1 ] ;
int tries = 0 ;
int win = 0 ;
printf ( "=== WORDLE GAME ===\n " ) ; printf ( "Category: %s\n " , categoryNames
[ catIndex
] ) ; printf ( "Guess the 5-letter word (%d tries)\n \n " , MAX_TRIES
) ;
while ( tries < MAX_TRIES && ! win) {
printf ( "Try %d: " , tries
+ 1 ) ; scanf ( "%5s" , guesses
[ tries
] ) ;
system ( "clear" ) ; /* Linux / Mac */ /* system("cls"); */ /* Windows */
printf ( "=== WORDLE GAME ===\n " ) ; printf ( "Category: %s\n \n " , categoryNames
[ catIndex
] ) ;
/* Print table */
for ( int r = 0 ; r < MAX_TRIES; r++ ) {
for ( int c = 0 ; c < WORD_LENGTH; c++ ) {
if ( r < tries + 1 ) {
if ( guesses[ r] [ c] == secret[ c] ) {
printf ( GREEN
"[%c]" RESET
, guesses
[ r
] [ c
] ) ; }
else if ( strchr ( secret
, guesses
[ r
] [ c
] ) ) { printf ( YELLOW
"[%c]" RESET
, guesses
[ r
] [ c
] ) ; }
else {
printf ( GRAY
"[%c]" RESET
, guesses
[ r
] [ c
] ) ; }
}
else {
}
}
}
int correct = 0 ;
for ( int i = 0 ; i < WORD_LENGTH; i++ )
if ( guesses[ tries] [ i] == secret[ i] )
correct++;
if ( correct == WORD_LENGTH)
win = 1 ;
tries++;
}
if ( win)
printf ( GREEN
"Bravo! You found the word: %s\n " RESET
, secret
) ; else
printf ( "Game Over! The word was: %s\n " , secret
) ;
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8dGltZS5oPgoKI2RlZmluZSBXT1JEX0xFTkdUSCA1CiNkZWZpbmUgTUFYX1RSSUVTIDYKI2RlZmluZSBDQVRFR09SSUVTIDMKI2RlZmluZSBXT1JEU19QRVJfQ0FUIDUKCi8qIEFOU0kgY29sb3JzICovCiNkZWZpbmUgR1JFRU4gICJcMDMzWzE7MzJtIgojZGVmaW5lIFlFTExPVyAiXDAzM1sxOzMzbSIKI2RlZmluZSBHUkFZICAgIlwwMzNbMTszN20iCiNkZWZpbmUgUkVTRVQgICJcMDMzWzBtIgoKaW50IG1haW4oKSB7CgogICAgY2hhciBjYXRlZ29yeU5hbWVzW0NBVEVHT1JJRVNdWzIwXSA9IHsKICAgICAgICAiUGxhY2VzIiwKICAgICAgICAiQW5pbWFscyIsCiAgICAgICAgIk9iamVjdHMiCiAgICB9OwoKICAgIGNoYXIgd29yZHNbQ0FURUdPUklFU11bV09SRFNfUEVSX0NBVF1bV09SRF9MRU5HVEggKyAxXSA9IHsKICAgICAgICB7ICJtZWNjYSIsICJwYXJpcyIsICJtaWxhbiIsICJkdWJhaSIsICJjYWlybyIgfSwKICAgICAgICB7ICJ0aWdlciIsICJob3JzZSIsICJzaGVlcCIsICJ6ZWJyYSIsICJjYW1lbCIgfSwKICAgICAgICB7ICJjaGFpciIsICJ0YWJsZSIsICJwaG9uZSIsICJnbGFzcyIsICJjbG9jayIgfQogICAgfTsKCiAgICBzcmFuZCh0aW1lKE5VTEwpKTsKCiAgICBpbnQgY2F0SW5kZXggPSByYW5kKCkgJSBDQVRFR09SSUVTOwogICAgY2hhciBzZWNyZXRbV09SRF9MRU5HVEggKyAxXTsKICAgIHN0cmNweShzZWNyZXQsIHdvcmRzW2NhdEluZGV4XVtyYW5kKCkgJSBXT1JEU19QRVJfQ0FUXSk7CgogICAgY2hhciBndWVzc2VzW01BWF9UUklFU11bV09SRF9MRU5HVEggKyAxXTsKICAgIGludCB0cmllcyA9IDA7CiAgICBpbnQgd2luID0gMDsKCiAgICBwcmludGYoIj09PSBXT1JETEUgR0FNRSA9PT1cbiIpOwogICAgcHJpbnRmKCJDYXRlZ29yeTogJXNcbiIsIGNhdGVnb3J5TmFtZXNbY2F0SW5kZXhdKTsKICAgIHByaW50ZigiR3Vlc3MgdGhlIDUtbGV0dGVyIHdvcmQgKCVkIHRyaWVzKVxuXG4iLCBNQVhfVFJJRVMpOwoKICAgIHdoaWxlICh0cmllcyA8IE1BWF9UUklFUyAmJiAhd2luKSB7CgogICAgICAgIHByaW50ZigiVHJ5ICVkOiAiLCB0cmllcyArIDEpOwogICAgICAgIHNjYW5mKCIlNXMiLCBndWVzc2VzW3RyaWVzXSk7CgogICAgICAgIHN5c3RlbSgiY2xlYXIiKTsgLyogTGludXggLyBNYWMgKi8KICAgICAgICAvKiBzeXN0ZW0oImNscyIpOyAqLyAvKiBXaW5kb3dzICovCgogICAgICAgIHByaW50ZigiPT09IFdPUkRMRSBHQU1FID09PVxuIik7CiAgICAgICAgcHJpbnRmKCJDYXRlZ29yeTogJXNcblxuIiwgY2F0ZWdvcnlOYW1lc1tjYXRJbmRleF0pOwoKICAgICAgICAvKiBQcmludCB0YWJsZSAqLwogICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgTUFYX1RSSUVTOyByKyspIHsKICAgICAgICAgICAgZm9yIChpbnQgYyA9IDA7IGMgPCBXT1JEX0xFTkdUSDsgYysrKSB7CgogICAgICAgICAgICAgICAgaWYgKHIgPCB0cmllcyArIDEpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZ3Vlc3Nlc1tyXVtjXSA9PSBzZWNyZXRbY10pIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKEdSRUVOICJbJWNdIiBSRVNFVCwgZ3Vlc3Nlc1tyXVtjXSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNocihzZWNyZXQsIGd1ZXNzZXNbcl1bY10pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZihZRUxMT1cgIlslY10iIFJFU0VULCBndWVzc2VzW3JdW2NdKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZihHUkFZICJbJWNdIiBSRVNFVCwgZ3Vlc3Nlc1tyXVtjXSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJbIF0iKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBwcmludGYoIlxuIik7CiAgICAgICAgfQoKICAgICAgICBpbnQgY29ycmVjdCA9IDA7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBXT1JEX0xFTkdUSDsgaSsrKQogICAgICAgICAgICBpZiAoZ3Vlc3Nlc1t0cmllc11baV0gPT0gc2VjcmV0W2ldKQogICAgICAgICAgICAgICAgY29ycmVjdCsrOwoKICAgICAgICBpZiAoY29ycmVjdCA9PSBXT1JEX0xFTkdUSCkKICAgICAgICAgICAgd2luID0gMTsKCiAgICAgICAgdHJpZXMrKzsKICAgICAgICBwcmludGYoIlxuIik7CiAgICB9CgogICAgaWYgKHdpbikKICAgICAgICBwcmludGYoR1JFRU4gIkJyYXZvISBZb3UgZm91bmQgdGhlIHdvcmQ6ICVzXG4iIFJFU0VULCBzZWNyZXQpOwogICAgZWxzZQogICAgICAgIHByaW50ZigiR2FtZSBPdmVyISBUaGUgd29yZCB3YXM6ICVzXG4iLCBzZWNyZXQpOwoKICAgIHJldHVybiAwOwp9