The faro shuffle (American), weave shuffle (British), riffle shuffle, or dovetail shuffle is a method of shuffling playing cards. Mathematicians use "faro shuffle" for a shuffle in which the deck is split into equal halves of 26 cards that are then interwoven perfectly.
Magicians use these terms for a particular technique (which Diaconis, Graham, and Kantor call "the technique") for achieving this result. A right-handed practitioner holds the cards from above in the right and from below in the left hand. The deck is separated into two preferably equal parts by simply lifting up half the cards with the right thumb slightly and pushing the left hand's packet forward away from the right hand. The two packets are often crossed and tapped against each other to align them. They are then pushed together on the short sides and bent either up or down. The cards will then alternately fall onto each other, ideally alternating one by one from each half, much like a zipper. A flourish can be added by springing the packets together by applying pressure and bending them from above.
A game of faro ends with the cards in two equal piles that the dealer must combine to deal them for the next game. According to the magician John Maskelyne, the above method was used, and he calls it the "faro dealer's shuffle". Maskelyne was the first to give clear instructions, but the shuffle was used and associated with faro earlier, as discovered mostly by the mathematician and magician Persi Diaconis.
A faro shuffle that leaves the original top card at the top and the original bottom card at the bottom is known as an out-shuffle; one that moves the original top card to second and the original bottom card to second from the bottom is known as an in-shuffle. These names were coined by the magician and computer programmer Alex Elmsley. A perfect faro shuffle, where the cards are perfectly alternated, is considered one of the most difficult sleights of card manipulation, because it requires the shuffler to cut the deck into two equal stacks and apply just the right pressure when pushing the half decks into each other.
The faro shuffle is a controlled shuffle that does not fully randomize a deck. If one manages to perform eight perfect faro out-shuffles in a row, then the deck of 52 cards will be restored to its original order. If one can do perfect in-shuffles, then 26 shuffles will reverse the order of the deck and 26 more will restore it to its original order.
A faro shuffle is not to be confused with a sorting algorithm. A perfect faro shuffle cycles the order of the cards into a fixed number of states. For a 52-card deck using perfect faro out-shuffles, there are 8 possible states in the cycle. That is, a faro shuffle can only be used to return the deck to its order prior to faro shuffling; it will not sort a randomized deck, nor can it return a randomized deck to new-deck order (unless the randomized initial state of the deck just happens to be one of the permutations of faro-shuffling a new deck).
In-shuffles and out-shuffles are used in computer algorithms, notably in parallel computing.
Below is a Python 3 implementation of a perfect faro out-shuffle:
#! /usr/bin/env python # -*- coding: utf-8 -*- class Deck(object): def __init__self): self.cards = [ 'A♠', '2♠', '3♠', '4♠', '5♠', '6♠', '7♠', '8♠', '9♠', '10♠', 'J♠', 'Q♠', 'K♠', 'A♦', '2♦', '3♦', '4♦', '5♦', '6♦', '7♦', '8♦', '9♦', '10♦', 'J♦', 'Q♦', 'K♦', 'K♣', 'Q♣', 'J♣','10♣', '9♣', '8♣', '7♣', '6♣', '5♣', '4♣', '3♣', '2♣', 'A♣', 'K♥', 'Q♥','J♥', '10♥', '9♥', '8♥', '7♥', '6♥', '5♥', '4♥','3♥', '2♥', 'A♥'] def __eq__self, other): return self.cards == other.cards def faro_shuffle(self): '''Shuffles the deck using a perfect faro shuffle.''' r = [] for (a, b) in zip(self.cards[0:26], self.cards[26:]): r.append(a) r.append(b) self.cards = r original_deck = Deck() # A deck in new-deck-order we will use for comparison. shuffled_deck = Deck() # A deck we will repeatedly faro-shuffle. for i in range(1, 1000): shuffled_deck.faro_shuffle() if shuffled_deck == original_deck: print("Deck is back in new-deck order after %s shuffles." % i) break
The program shuffles a 52-card deck until it returns to its original order. This happens in exactly 8 iterations (shuffles):
(prompt)> python shuffle.py
The deck is back in new-deck order after 8 shuffles.
Below is a Perl implementation of a perfect out-faro shuffle:
#!/usr/bin/perl # File: faro_shuffle.pl # Usage: perl faro_shuffle.pl # Purpose: To discover how many out-faro shuffles are required to # revert a deck of 52 cards back to its original order. use strict; use warnings; # Given an input of 52 elements (cards), returns them # as if they were shuffled with an out-faro shuffle: sub faroShuffle { # Verify that there are exactly 52 inputs: use Carp; croak "faroShuffle() requires 52 elements" unless @_ == 52; return map { @_[$_, $_+26] } (0 .. 25); } # Define a deck in new-deck order that we will use for comparison: my @originalDeck = qw( AH 2H 3H 4H 5H 6H 7H 8H 9H 10H JH QH KH AC 2C 3C 4C 5C 6C 7C 8C 9C 10C JC QC KC KD QD JD 10D 9D 8D 7D 6D 5D 4D 3D 2D AD KS QS JS 10S 9S 8S 7S 6S 5S 4S 3S 2S AS ); # Create a deck that we will repeatedly faro-shuffle: my @shuffledDeck = @originalDeck; foreach my $i (1 .. 1000) { @shuffledDeck = faroShuffle(@shuffledDeck); if ("@shuffledDeck" eq "@originalDeck") { print "The deck is back in new-deck order after $i out-faro shuffles.\n"; last; } } __eND__
The program shuffles a 52-card deck until it returns to its original order. This happens in exactly 8 iterations (shuffles):
(prompt)> perl faro_shuffle.pl
The deck is back in new-deck order after 8 out-faro shuffles.
Below is a Perl 6 implementation of a perfect out-faro shuffle:
#!/usr/bin/perl6 # File: faro_shuffle.p6 # Usage: perl6 faro_shuffle.p6 # Purpose: To discover how many out-faros shuffles are required to # revert a deck of 52 cards back to its original order. use v6; # Define a deck in new-deck order that we will use for comparison: my @originalDeck = < AH 2H 3H 4H 5H 6H 7H 8H 9H 10H JH QH KH AC 2C 3C 4C 5C 6C 7C 8C 9C 10C JC QC KC KD QD JD 10D 9D 8D 7D 6D 5D 4D 3D 2D AD KS QS JS 10S 9S 8S 7S 6S 5S 4S 3S 2S AS >; # Create a deck that we will repeatedly faro-shuffle: my @deck = @originalDeck; for 1 .. * -> $i { @deck = @deck[0 .. */2-1] Z @deck[*/2 .. *-1]; # the faro shuffle next unless @deck eqv @originalDeck; # if no match, repeat # We got a match! Report and break out: print "The deck is back in new-deck order after $i out-faro shuffles.\n"; last; } =finish
The program shuffles a 52-card deck until it returns to its original order. This happens in exactly 8 iterations (shuffles):
(prompt)> perl6 faro_shuffle.p6
The deck is back in new-deck order after 8 out-faro shuffles.
In mathematics, a perfect shuffle can be considered an element of the symmetric group.
More generally, in , the perfect shuffle is the permutation that splits the set into 2 piles and interleaves them:
In other words, it is the map
Analogously, the -perfect shuffle permutation is the element of that splits the set into k piles and interleaves them.
The -perfect shuffle, denoted , is the composition of the -perfect shuffle with an -cycle, so the sign of is:
The sign is thus 4-periodic:
The first few perfect shuffles are: and are trivial, and is the transposition .