#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SUITS 4
#define FACES 13
#define CARDS 52
void initializeDeck( int deck[ ] [ FACES] ) ;
void shuffle( int deck[ ] [ FACES] ) ;
void printDeck( int deck[ ] [ FACES] ) ;
void deal( int deck[ ] [ FACES] ,
const char * face[ ] ,
const char * suit[ ] ) ;
int main( void )
{
int deck[ SUITS] [ FACES] ;
const char * suit[ SUITS] =
{ "Hearts" , "Diamonds" , "Clubs" , "Spades" } ;
const char * face[ FACES] =
{
"Ace" , "Deuce" , "Three" , "Four" , "Five" ,
"Six" , "Seven" , "Eight" , "Nine" , "Ten" ,
"Jack" , "Queen" , "King"
} ;
initializeDeck( deck) ;
printf ( "The deck before shuffle:\n " ) ; printDeck( deck) ;
shuffle( deck) ;
printf ( "\n The deck after shuffle:\n " ) ; printDeck( deck) ;
printf ( "\n The cards after dealing:\n " ) ; deal( deck, face, suit) ;
return 0 ;
}
void initializeDeck( int deck[ ] [ FACES] )
{
int card = 1 ;
for ( int row = 0 ; row < SUITS; ++ row)
{
for ( int column = 0 ; column < FACES; ++ column)
{
deck[ row] [ column] = card;
++ card;
}
}
}
void shuffle( int deck[ ] [ FACES] )
{
for ( int row = 0 ; row < SUITS; ++ row)
{
for ( int column = 0 ; column < FACES; ++ column)
{
int randomRow
= rand ( ) % SUITS
; int randomColumn
= rand ( ) % FACES
;
int hold = deck[ row] [ column] ;
deck[ row] [ column] =
deck[ randomRow] [ randomColumn] ;
deck[ randomRow] [ randomColumn] = hold;
}
}
}
void printDeck( int deck[ ] [ FACES] )
{
for ( int row = 0 ; row < SUITS; ++ row)
{
for ( int column = 0 ; column < FACES; ++ column)
{
printf ( "%4d" , deck
[ row
] [ column
] ) ; }
}
}
void deal( int deck[ ] [ FACES] ,
const char * face[ ] ,
const char * suit[ ] )
{
for ( int card = 1 ; card <= CARDS; ++ card)
{
int found = 0 ;
for ( int row = 0 ; row < SUITS && found == 0 ; ++ row)
{
for ( int column = 0 ;
column < FACES;
++ column)
{
if ( deck[ row] [ column] == card)
{
face[ column] ,
suit[ row] ) ;
if ( card % 4 == 0 )
{
}
else
{
}
found = 1 ;
break ;
}
}
}
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHRpbWUuaD4KCiNkZWZpbmUgU1VJVFMgNAojZGVmaW5lIEZBQ0VTIDEzCiNkZWZpbmUgQ0FSRFMgNTIKCnZvaWQgaW5pdGlhbGl6ZURlY2soaW50IGRlY2tbXVtGQUNFU10pOwp2b2lkIHNodWZmbGUoaW50IGRlY2tbXVtGQUNFU10pOwp2b2lkIHByaW50RGVjayhpbnQgZGVja1tdW0ZBQ0VTXSk7Cgp2b2lkIGRlYWwoaW50IGRlY2tbXVtGQUNFU10sCiAgICAgICAgICBjb25zdCBjaGFyICpmYWNlW10sCiAgICAgICAgICBjb25zdCBjaGFyICpzdWl0W10pOwoKCmludCBtYWluKHZvaWQpCnsKICAgIGludCBkZWNrW1NVSVRTXVtGQUNFU107CgogICAgY29uc3QgY2hhciAqc3VpdFtTVUlUU10gPQogICAgeyAiSGVhcnRzIiwgIkRpYW1vbmRzIiwgIkNsdWJzIiwgIlNwYWRlcyIgfTsKCiAgICBjb25zdCBjaGFyICpmYWNlW0ZBQ0VTXSA9CiAgICB7CiAgICAgICAgIkFjZSIsICJEZXVjZSIsICJUaHJlZSIsICJGb3VyIiwgIkZpdmUiLAogICAgICAgICJTaXgiLCAiU2V2ZW4iLCAiRWlnaHQiLCAiTmluZSIsICJUZW4iLAogICAgICAgICJKYWNrIiwgIlF1ZWVuIiwgIktpbmciCiAgICB9OwoKICAgIHNyYW5kKCh1bnNpZ25lZCBpbnQpdGltZShOVUxMKSk7CgogICAgaW5pdGlhbGl6ZURlY2soZGVjayk7CgogICAgcHJpbnRmKCJUaGUgZGVjayBiZWZvcmUgc2h1ZmZsZTpcbiIpOwogICAgcHJpbnREZWNrKGRlY2spOwoKICAgIHNodWZmbGUoZGVjayk7CgogICAgcHJpbnRmKCJcblRoZSBkZWNrIGFmdGVyIHNodWZmbGU6XG4iKTsKICAgIHByaW50RGVjayhkZWNrKTsKCiAgICBwcmludGYoIlxuVGhlIGNhcmRzIGFmdGVyIGRlYWxpbmc6XG4iKTsKICAgIGRlYWwoZGVjaywgZmFjZSwgc3VpdCk7CgogICAgcmV0dXJuIDA7Cn0KCgp2b2lkIGluaXRpYWxpemVEZWNrKGludCBkZWNrW11bRkFDRVNdKQp7CiAgICBpbnQgY2FyZCA9IDE7CgogICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgU1VJVFM7ICsrcm93KQogICAgewogICAgICAgIGZvciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IEZBQ0VTOyArK2NvbHVtbikKICAgICAgICB7CiAgICAgICAgICAgIGRlY2tbcm93XVtjb2x1bW5dID0gY2FyZDsKICAgICAgICAgICAgKytjYXJkOwogICAgICAgIH0KICAgIH0KfQoKCnZvaWQgc2h1ZmZsZShpbnQgZGVja1tdW0ZBQ0VTXSkKewogICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgU1VJVFM7ICsrcm93KQogICAgewogICAgICAgIGZvciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IEZBQ0VTOyArK2NvbHVtbikKICAgICAgICB7CiAgICAgICAgICAgIGludCByYW5kb21Sb3cgPSByYW5kKCkgJSBTVUlUUzsKICAgICAgICAgICAgaW50IHJhbmRvbUNvbHVtbiA9IHJhbmQoKSAlIEZBQ0VTOwoKICAgICAgICAgICAgaW50IGhvbGQgPSBkZWNrW3Jvd11bY29sdW1uXTsKCiAgICAgICAgICAgIGRlY2tbcm93XVtjb2x1bW5dID0KICAgICAgICAgICAgICAgIGRlY2tbcmFuZG9tUm93XVtyYW5kb21Db2x1bW5dOwoKICAgICAgICAgICAgZGVja1tyYW5kb21Sb3ddW3JhbmRvbUNvbHVtbl0gPSBob2xkOwogICAgICAgIH0KICAgIH0KfQoKCnZvaWQgcHJpbnREZWNrKGludCBkZWNrW11bRkFDRVNdKQp7CiAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBTVUlUUzsgKytyb3cpCiAgICB7CiAgICAgICAgZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgRkFDRVM7ICsrY29sdW1uKQogICAgICAgIHsKICAgICAgICAgICAgcHJpbnRmKCIlNGQiLCBkZWNrW3Jvd11bY29sdW1uXSk7CiAgICAgICAgfQoKICAgICAgICBwdXRzKCIiKTsKICAgIH0KfQoKCnZvaWQgZGVhbChpbnQgZGVja1tdW0ZBQ0VTXSwKICAgICAgICAgIGNvbnN0IGNoYXIgKmZhY2VbXSwKICAgICAgICAgIGNvbnN0IGNoYXIgKnN1aXRbXSkKewogICAgZm9yIChpbnQgY2FyZCA9IDE7IGNhcmQgPD0gQ0FSRFM7ICsrY2FyZCkKICAgIHsKICAgICAgICBpbnQgZm91bmQgPSAwOwoKICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBTVUlUUyAmJiBmb3VuZCA9PSAwOyArK3JvdykKICAgICAgICB7CiAgICAgICAgICAgIGZvciAoaW50IGNvbHVtbiA9IDA7CiAgICAgICAgICAgICAgICAgY29sdW1uIDwgRkFDRVM7CiAgICAgICAgICAgICAgICAgKytjb2x1bW4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChkZWNrW3Jvd11bY29sdW1uXSA9PSBjYXJkKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHByaW50ZigiJTVzIG9mICUtOHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlW2NvbHVtbl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRbcm93XSk7CgogICAgICAgICAgICAgICAgICAgIGlmIChjYXJkICUgNCA9PSAwKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHV0cygiIik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXHQiKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGZvdW5kID0gMTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQ==