fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <limits.h>
  4. #include <time.h>
  5.  
  6. /* generate 52 card poker deck and shuffle it */
  7.  
  8. #define SUITS 4
  9. #define RANKS 13
  10. #define TOTAL (SUITS * RANKS)
  11.  
  12. typedef unsigned char card_t;
  13. const char *const suit[] = {
  14. "♠", "♥", "♦", "♣"
  15. };
  16. const char *const rank[] = {
  17. "A", "2", "3", "4", "5", "6",
  18. "7", "8", "9", "10", "J", "Q", "K"
  19. };
  20.  
  21. int main(void)
  22. {
  23. srand(time(NULL));
  24. card_t *deck = malloc(sizeof(card_t) * TOTAL);
  25. unsigned i, j, k = 0;
  26. for (i = 0; i < SUITS; i++) /* generate */
  27. for (j = 0; j < RANKS; j++)
  28. deck[k++] = (i << (CHAR_BIT / 2)) | j;
  29. for (i = 0; i < TOTAL; i++) /* shuffle */
  30. {
  31. retry: k = rand() % TOTAL;
  32. card_t sel = deck[k];
  33. for (j = 0; j < i; j++)
  34. if (sel == deck[j])
  35. goto retry;
  36. deck[k] = deck[i];
  37. deck[i] = sel;
  38. }
  39. for (i = 0; i < TOTAL; i++) /* display */
  40. {
  41. unsigned s = deck[i] >> (CHAR_BIT / 2);
  42. unsigned r = deck[i] & 0xF;
  43. printf("%s%s ", rank[r], suit[s]);
  44. if (!((i + 1) % 4))
  45. putchar('\n');
  46. }
  47. free(deck);
  48. return 0;
  49. }
Success #stdin #stdout 0s 10320KB
stdin
Standard input is empty
stdout
4♥ A♣ 5♦ K♣ 
5♣ K♠ 8♥ 9♥ 
5♠ 4♠ 10♠ K♥ 
8♣ 7♣ 4♣ 6♦ 
2♣ 9♠ A♦ J♥ 
10♦ 10♥ J♦ 9♦ 
2♠ 7♦ A♠ 3♣ 
7♠ Q♠ 2♦ 3♥ 
9♣ 6♣ 3♦ 10♣ 
8♦ 3♠ 7♥ A♥ 
Q♦ K♦ 2♥ J♠ 
5♥ 8♠ 6♠ Q♣ 
Q♥ 4♦ 6♥ J♣