shuffle.c

/*-----------------------------------------------------------------------------
 * Copyright (C) 1995 Herb Weiner. All rights reserved.
 * Demonstration that 8 perfect shuffles returns a deck of 52 chards
 * to its original order.
 * Compile using gcc compiler.
 *-----------------------------------------------------------------------------
 */

#include <stdio.h>

static const int NUMBER_OF_SHUFFLES = 8;
static const int NUMBER_OF_CARDS = 52;

static const char *cards [] =
{
	"Ace   Clubs",
	"2     Clubs",
	"3     Clubs",
	"4     Clubs",
	"5     Clubs",
	"6     Clubs",
	"7     Clubs",
	"8     Clubs",
	"9     Clubs",
	"10    Clubs",
	"Jack  Clubs",
	"Queen Clubs",
	"King  Clubs",

	"Ace   Diamonds",
	"2     Diamonds",
	"3     Diamonds",
	"4     Diamonds",
	"5     Diamonds",
	"6     Diamonds",
	"7     Diamonds",
	"8     Diamonds",
	"9     Diamonds",
	"10    Diamonds",
	"Jack  Diamonds",
	"Queen Diamonds",
	"King  Diamonds",

	"Ace   Hearts",
	"2     Hearts",
	"3     Hearts",
	"4     Hearts",
	"5     Hearts",
	"6     Hearts",
	"7     Hearts",
	"8     Hearts",
	"9     Hearts",
	"10    Hearts",
	"Jack  Hearts",
	"Queen Hearts",
	"King  Hearts",

	"Ace   Spades",
	"2     Spades",
	"3     Spades",
	"4     Spades",
	"5     Spades",
	"6     Spades",
	"7     Spades",
	"8     Spades",
	"9     Spades",
	"10    Spades",
	"Jack  Spades",
	"Queen Spades",
	"King  Spades",
};

main ()
{
	int		deck [NUMBER_OF_SHUFFLES + 1] [NUMBER_OF_CARDS];
	int		i;
	int		j;
	int		half = NUMBER_OF_CARDS / 2;

	for (j = 0; j < NUMBER_OF_CARDS; j++)
		deck [0] [j] = j;

	for (i = 1; i <= NUMBER_OF_SHUFFLES; i++)
	{
		for (j = 0; j < half; j++)
		{
			deck [i] [2 * j]     = deck [i - 1] [j];
			deck [i] [2 * j + 1] = deck [i - 1] [half + j];
		}

		fprintf (stdout, "\nResults of shuffle %d:\n", i);
		for (j = 0; j < NUMBER_OF_CARDS; j++)
			fprintf (stdout, "    %s\n", cards [deck [i] [j]]);
	}
}